请帮帮我.. 我声明游标使用IN子句值从其他表获取,其中值将使用逗号(,)分隔并将其存储到变量并赋予IN子句。
这是我的代码:
CREATE DEFINER=`xxx`@`%` PROCEDURE `procedurename`(
OUT examDetails VARCHAR(2500)
)
BEGIN
DECLARE v_examType VARCHAR(50);
DECLARE v_minMarks INT(10);
DECLARE v_time INT(10);
DECLARE v_noOfQuestions INT(10);
DECLARE v_subTopicIds VARCHAR(50);
DECLARE v_subtopicname VARCHAR(50);
DECLARE v_result VARCHAR(2500) DEFAULT '';
DECLARE v_temp INT(20);
DECLARE cur1 CURSOR FOR SELECT ExamType,MinMarks,TIME,NoOfQuestions,SubTopicIds FROM tblCreSetExam;
select ExamType,MinMarks,Time,NoOfQuestions,SubTopicIds from tblCreSetExam
OPEN cur1;
FETCH FROM cur1 INTO v_examType,v_minMarks,v_time,v_noOfQuestions,v_subTopicIds;
declare cur2 cursor for select SubTopicName from tblEcertSubTopics where Id in (v_subTopicIds);
v_result = CONCAT(v_result,v_examType,'!',v_minMarks,'!',v_time,'!',v_noOfQuestions,'!');
open cur2;
fetch from cur2 into v_subtopicname;
v_result = CONCAT(v_result,v_subtopicname,'!');
close cur2;
v_temp = LENGTH(v_result)-1;
v_result = SUBSTRING(v_result,1,v_temp);
v_result = CONCAT(v_result,'^')
CLOSE cur1;
SET examDetails = v_result;
END$$
DELIMITER ;
但是我收到了这个错误:
错误代码:1064 您的SQL语法有错误;检查与您的对应的手册 MySQLserver版本用于在'declare cur2 cursor'附近使用的正确语法 table1中的column1,其中Id位于('第20行
任何人都知道为什么会这样...... 提前致谢
答案 0 :(得分:0)
您不能将IN CLAUSE与VARCHAR变量一起使用。
这不起作用:
where Id in (v_subTopicIds)
也许你在代码而不是SQL程序中尝试做什么,否则你需要重新考虑你的策略
答案 1 :(得分:0)
您的代码中存在多个错误。
错误1 :
FETCH FROM cur1 INTO v_examType,v_minMarks,v_time,v_noOfQuestions,v_subTopicIds;
将其更改为:
FETCH cur1 INTO v_examType,v_minMarks,v_time,v_noOfQuestions,v_subTopicIds;
错误是由于FROM
的存在。这不是必需的。
错误2 :
更改
v_result = CONCAT(v_result,'^')
致:
v_result = CONCAT(v_result,'^');
缺少分号。