データベースで次の手順を正常に定義しましたが、どういうわけか期待どおりに機能しません。
CREATE PROCEDURE `mod_prefer`(IN sid INT)
BEGIN
declare s1 int;
declare s2 int;
SELECT SUM(c_load) INTO s1 FROM course WHERE id IN (SELECT course_id FROM prefer WHERE staff_id = sid) AND sem = 1;
SELECT SUM(c_load) INTO s2 FROM course WHERE id IN (SELECT course_id FROM prefer WHERE staff_id = sid) AND sem = 2;
IF s1>s2 THEN
UPDATE staff SET sem = 1 WHERE id = sid;
ELSE
UPDATE staff SET sem = 2 WHERE id = sid;
END IF;
END
上記の手順は、次のようにトリガーを使用して呼び出されます (挿入後のトリガーです)。
CALL mod_prefer(new.staff_id);
その結果sem
、指定されたスタッフ メンバーの値を設定する代わりに、ロジックがどのように機能するかに関係なく、つまり、sem の値が実際には 1 であっても、手順はすべての sem 値を 2 に更新します。
助けてください。