我正在写一生中的第一个MySQL存储函数,即使没有经验,我仍然觉得有些愚蠢。

这是我到目前为止写的:



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


我用SELECT credits_per_course(1019, 262)称呼它。我知道魔术数是一个课程,其中一个课程是一个课程,一个测试用户,这时该功能仍然被忽略。

课程1019有四节课。如果我运行该函数,它将给我2462课,这是所有课的总数。

为了进行测试,我尝试:


SET lessons_count = 42;查询之后添加一行SELECT COUNT(*),它返回42;
使用不存在的课程ID(例如99999)更改WHERE子句,正确地,它返回0课;
更改WHERE子句,以显式传递1019课程ID,但仍给我2462节课程;
试图在功能SELECT COUNT(*)查询的外部运行,课程ID为1019,它返回4节课。


我知道我可能犯了一些愚蠢的错误,但我不知道是哪一个...

最佳答案

正如JohnHC指出的那样,这是我对参数名称不区分大小写的无知。

因此,一旦将参数名称更改为CIDUID之类的名称,它便会正常工作。

谢谢!

关于mysql - MySQL CREATE FUNCTION语句似乎忽略了WHERE条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39365154/

10-11 03:22
查看更多