MySQL CREATE FUNCTION语句似乎忽略了WHERE条件

时间:2016-09-07 08:42:32

标签: mysql sql stored-procedures stored-functions

我在我的整个人生中都在编写第一个MySQL存储函数,而且即使对我没有经验,我也会遇到一些看似愚蠢的事情。

这是我直到现在所写的:

for /?

我使用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有四节课。如果我运行该功能,它会给我2462课,这是所有课程的计数。

为了测试,我尝试:

  • SELECT credits_per_course(1019, 262)查询后添加一行SET lessons_count = 42;,然后返回42;
  • 使用不存在的课程ID更改WHERE子句,如99999,并且正确地,它返回0课程;
  • 更改WHERE子句显式传递1019课程ID,但它仍然给我2462课程;
  • 尝试在函数外部运行SELECT COUNT(*)查询,课程编号为1019,并返回4课程。

我知道我可能犯了一些愚蠢的错误,但我无法弄清楚哪一个......

1 个答案:

答案 0 :(得分:0)

正如JohnHC所说,这是一个问题,我对参数名称不区分大小写的情况一无所知。

因此,一旦将参数名称更改为CIDUID,它就能正常运行。

谢谢!