我正在写一生中的第一个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指出的那样,这是我对参数名称不区分大小写的无知。
因此,一旦将参数名称更改为CID
和UID
之类的名称,它便会正常工作。
谢谢!
关于mysql - MySQL CREATE FUNCTION语句似乎忽略了WHERE条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39365154/