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レッスンを返します。
私はおそらくいくつかの愚かな間違いを犯していますことを知っているが、私はどちらを把握することはできません ...
パラメータCOURSE_IDはフィールド名course_idと同じですが、名前を変更してみてください。 – JohnHC
あなた。製。じぶんの。日。大いに感謝する! – ciamiz
自己回答の質問やそれを削除しますか? – Drew