2016-11-18 58 views
0

一个变量我在存储过程中的以下代码: MySQL的光标在SELECT语句

DECLARE done INT DEFAULT FALSE; 
declare v_degree int(11); 
declare v_start_age smallint(6); 
declare v_end_age smallint(6); 
declare v_gender varchar(20); 
declare v_calctable varchar(200); 

SELECT calculationtable into v_calctable FROM wac.degrees where tablename = concat("cdb_" + arg_tablename); 

declare cur CURSOR for select degree, start_age, end_age, belt, gender from v_calctable; 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 

喜欢我会得到在该行有语法错误“选择calculationtable到v_calctable FROM WAC。度数where tablename = concat(“cdb_”+ arg_tablename);“

如果我把它放在“Declare cursor”之后,没有语法错误,但我需要在de Cursor select语句上使用结果。

我该如何做到这一点?

谢谢。

+0

你可能需要的只是一个联接,而不是存储过程 – e4c5

回答

1
CREATE DEFINER=`root`@`localhost` PROCEDURE `my_procedure`() 
BEGIN 
DECLARE done INT DEFAULT FALSE; 
declare v_degree int(11); 
declare v_start_age smallint(6); 
declare v_end_age smallint(6); 
declare v_gender varchar(20); 
declare v_calctable varchar(200); 

SELECT calculationtable into v_calctable FROM wac.degrees where tablename = concat("cdb_" + arg_tablename); 
begin                 -- write here begin keyword 
declare cur CURSOR for select degree, start_age, end_age, belt, gender from v_calctable; 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 
end;                 -- end here inner block 

END 

当您使用内嵌块被另一开始结束关键字 那么它有没有syntask错误。 但这个过程给你正确的结果或不我不清楚