我有这样的程序但是我一直想要执行它我在声明变量附近时会出现语法错误...任何人都可以告诉我我的错误是什么
我有两个表用于问题,一个用于答案,excel文件用于将数据迁移到此表。 excel中的数据如下所示:
ID N TITLE
3 99500 question1
4
5 answer1
6 X answer2
7 answer3
DELIMITER $$
create Procedure proc_answermigration()
begin
DECLARE @i,@n,@q,@ind,@pt varchar default '';
DECLARE @done,@aord int default 0;
DECLARE cur cursor for select ID, N, question, from test.qustionmigration;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET @done = 1;
open cur;
read_loop: Loop
fetch cur into i,n,q;
IF done THEN
LEAVE read_loop;
END IF;
if n <> '' or n <> 'X'
then
select @ind = iq.question_id, @pt = iq.points from test.qustionmigration qm
inner join ilias.qpl_questions iq on qm.question = iq.question_text
where question = q
else
insert into qpl_a_sc
(
answer_id,
question_fi,
answertext,
points,
aorder,
tstamp
)
select (select sequence from qpl_a_sc_seq),
ind,
question,
pt,
aord,
'1342884200'
from test.qustionmigration
end if;
update qpl_a_sc_seq
set sequence = sequence + 1;
if @aord = 0 then set @aord = 1;
elseif @aord = 1 then set @aord = 2;
else set @aord = 0;
end loop;
CLOSE cur;
end$$
DELIMITER ;
我更正了一些陈述,但仍然有语法错误说:
#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 'LOOP; close cur; end' at line 52
DELIMITER $$
create Procedure proc_answermigration()
begin
DECLARE i,n,q,ind,pt varchar(500) default '';
DECLARE done,aord,c int default 0;
DECLARE cur cursor for select ID, N, question from test.qustionmigration;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
open cur;
read_loop: LOOP
fetch cur into i,n,q;
IF n <> '' or n <> 'X'
then
select ind = iq.question_id, pt = iq.points from test.qustionmigration qm
inner join ilias.qpl_questions iq on qm.question = iq.question_text
where question = q;
else
insert into qpl_a_sc
(
answer_id,
question_fi,
answertext,
points,
aorder,
tstamp
)
select (select sequence from qpl_a_sc_seq),
ind,
question,
pt,
aord,
'1342884200'
from test.qustionmigration;
end IF;
update qpl_a_sc_seq
set sequence = sequence + 1;
if aord = 0 then set aord = 1;
elseif aord = 1 then set aord = 2;
else set aord = 0;
set c = c + 1;
IF done = 1 THEN
LEAVE read_loop;
END IF;
END LOOP;
close cur;
end$$
DELIMITER ;
答案 0 :(得分:1)
你不能DECLARE
user variables(以@
开头)。只需SET
他们,或者使用local variables(不是以@
开头)。
答案 1 :(得分:1)
您的上一个IF ELSE
阻止了END IF
:
if @aord = 0 then set @aord = 1;
elseif @aord = 1 then set @aord = 2;
else set @aord = 0;
/* END IF either belongs here or after following statements, depending on your intended logic */
/* Either way, this block is unclosed when you close the loop */
end if
当解析器读取END LOOP;
时,它正在查找END IF
,并在LOOP
报告语法错误。