2016-09-07 8 views
0

私は一生のうちに最初のMySQLストアドファンクションを書いています。MySQL CREATE FUNCTIONステートメントはWHERE条件を無視しているようです

これは私が今まで書いたものです:私はこのSELECT credits_per_course(1019, 262)を使用して呼び出す

CREATE FUNCTION `credits_per_course`(COURSE_ID INT, USER_ID INT) 
RETURNS int(11) 
BEGIN 

    DECLARE users_credits INT; 

    DECLARE course_credits INT; 
    DECLARE course_mandatory_credits INT; 
    DECLARE course_total_credits INT; 

    DECLARE lessons_count INT; 

    DECLARE lessons CURSOR FOR 
      SELECT * FROM t_lessons WHERE course_id = COURSE_ID; 

    SELECT COUNT(*) INTO lessons_count FROM t_lessons WHERE course_id = COURSE_ID; 

RETURN lessons_count; 
END 

。マジックナンバーは、私がレッスン数とテストユーザーを知っているコースであり、この時点ではまだ無視されています。

コース1019には4つのレッスンがあります。私がこの機能を実行すると、それは私にすべてのレッスンの数である2462レッスンを与えます。テストのために

、私がしようとした:

  • SELECT COUNT(*)クエリ後行SET lessons_count = 42;を追加し、それは42を返します。
  • 99999のように存在しないコースIDを使用してWHERE句を変更し、正しく0レッスンを返します。
  • WHERE句を明示的に1019コースのIDに変更しても、2462のレッスンが残ります。
  • は、コースIDが1019のSELECT COUNT(*)クエリの外で実行しようとしました。これは4レッスンを返します。

私はおそらくいくつかの愚かな間違いを犯していますことを知っているが、私はどちらを把握することはできません ...

+5

パラメータCOURSE_IDはフィールド名course_idと同じですが、名前を変更してみてください。 – JohnHC

+0

あなた。製。じぶんの。日。大いに感謝する! – ciamiz

+0

自己回答の質問やそれを削除しますか? – Drew

答えて

0

JohnHCが示されているように、それが問題のパラメータ名のケース小文字を区別しない程度自分の無知でした。

パラメータの名前をCIDUIDに変更したところ、正常に動作しました。

ありがとうございます!

関連する問題