Mysql - 在过程中声明游标的过程中的IN子句

时间:2014-02-07 09:47:53

标签: mysql sql stored-procedures

请帮帮我.. 我声明游标使用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行

任何人都知道为什么会这样...... 提前致谢

2 个答案:

答案 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,'^');

缺少分号。