gpt4 book ai didi

mysql - DECLARE CURSOR FOR 语法错误

转载 作者:可可西里 更新时间:2023-11-01 06:34:40 26 4
gpt4 key购买 nike

我不明白为什么我在下面的 sp 代码中出现语法错误。谁能帮我解决这个问题?

SQL 错误 (1064):

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE CUR1 CURSOR FOR SELECT pc.prospectus_courses_id FROM prereq_cou' at line 8

DELIMITER $$
DROP PROCEDURE IF EXISTS get_prereqs3$$
CREATE PROCEDURE get_prereqs3(IN prosp_courses_id SMALLINT(5))
BEGIN
DECLARE done int DEFAULT FALSE;
DECLARE required SMALLINT(5) default 0;
DECLARE to_search SMALLINT(5) default 0;
DROP TABLE IF EXISTS tmp_list;
CREATE TABLE tmp_list(courses_id SMALLINT(5), courses_id_req SMALLINT(5)) ENGINE = MEMORY;
DECLARE CUR1 CURSOR FOR SELECT pc.prospectus_courses_id
FROM prereq_courses pc
JOIN prerequisites pr on (pr.id = pc.prerequisites_id)
JOIN prospectus_courses ps on (ps.id = pr.prospectus_courses_id)
WHERE ps.id = to_search
MAIN_LOOP: LOOP
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur1;
FETCH cur1 INTO required;

IF done THEN
CLOSE cur1;
LEAVE main_loop;
ELSE
insert into tmp_list values (to_search, required);
set to_search = required;
iterate main_loop;
END IF;
END LOOP;
select c.course_code
from tmp_list t
join prospectus_courses pc on pc.id = t.courses_id_req
join courses c on c.id = pc.courses_id ;
drop table tmp_list;
END$$
DELIMITER ;

最佳答案

声明必须紧跟在 BEGIN block 之后。在您的情况下,只需移动 DECLARE cur1 CURSORDECLARE CONTINUE HANDLER.. 两行。

有时您希望稍后在代码中声明变量或游标,例如,如果满足条件。

在这种情况下,您可以再次用嵌套的 BEGIN .. END 包裹该 block 。

http://dev.mysql.com/doc/refman/5.5/en/begin-end.htmlhttp://dev.mysql.com/doc/refman/5.5/en/declare.html

DECLARE is permitted only inside a BEGIN ... END compound statement and must be at its start, before any other statements.

您还声明了 CUR1 但使用的是 cur1

关于mysql - DECLARE CURSOR FOR 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14423310/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com