1

mysql ストアド関数に奇妙な問題があります。関数は、クエリを単独で実行した場合とは異なる結果を返しています。これが私の機能です:

DELIMITER $$
CREATE DEFINER=`admin`@`%` FUNCTION `getARetention`
(appID int(10), currentDate DATE) 
RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
BEGIN

  RETURN 
(SELECT count(DISTINCT UserId)
           FROM
               Session 
       WHERE  (Date(Started) = currentDate  AND AppId=appID));
END

これが私がそれを呼び出す方法です:

SELECT getARetention(5,DATE('2013-04-03'));

単独のクエリは次のとおりです。

SELECT count(DISTINCT UserId)
           FROM
               Session 
       WHERE  (Date(Started) = DATE('2013-04-03')  AND AppId=5)

関数は 2502 を返しますが、これは間違っています。単独のクエリは 5 を返しますが、これは正しいです。また、単独のクエリから「AND AppId=5」を削除すると、2502 が返されます。これは、保存された関数で条件が機能していないことを意味します。

誰でも理由がわかりますか?しばらく mysql を使用していないため、おそらく何か不足しています。

4

1 に答える 1