※ ChatGPTを利用し、要約された質問です(原文:Mysql ストアドファンクション 意図しない結果)
Mysql ストアドファンクション 意図しない結果
このQ&Aのポイント
ストアドファンクションを作成したが、引数に関係なく戻り値が常に全ての行になってしまう
ストアドファンクションのWhere句が正しく機能していない原因を教えて欲しい
fgetLineNew関数を実行しても、戻り値が常に817の値になる
Mysql ストアドファンクション 意図しない結果
以下の通りストアドファンクションを作成しました。
関数名:fgetLineNew
インパラメータ:shop Varchar 8 ※1つだけ。。。
戻り値: Int 11
<ソース>
BEGIN
DECLARE pline INTEGER(11) DEFAULT NULL;
SELECT COUNT(1) INTO pline
FROM `hoge`
WHERE `SHOP` = shop;
IF pline IS NULL THEN
SET pline = 10000;
END IF;
RETURN pline;
END
上記のように、作成したストアドファンクションですが、
どんな引数を入れても、戻り値が全ての行(817行)になってしまいます。
以下を参照。
Where区がまったく働いていないのですが、何が原因なのでしょうか。
教えてください。
<ストアドファンクション実行>
mysql> select fgetLineNew(1);
+----------------+
| fgetLineNew(1) |
+----------------+
| 817 |
+----------------+
1 row in set (0.01 sec)
mysql> select fgetLineNew(525);
+------------------+
| fgetLineNew(525) |
+------------------+
| 817 |
+------------------+
1 row in set (0.01 sec)
mysql> select fgetLineNew(101);
+------------------+
| fgetLineNew(101) |
+------------------+
| 817 |
+------------------+
1 row in set (0.00 sec)
mysql> select fgetLineNew(525);
+------------------+
| fgetLineNew(525) |
+------------------+
| 817 |
+------------------+
1 row in set (0.00 sec)
mysql> select fgetLineNew('525');
+--------------------+
| fgetLineNew('525') |
+--------------------+
| 817 |
+--------------------+
1 row in set (0.01 sec)
お礼
引数のshop を、shop_in にかえたところうまくいきました。 ありがとうございました。