mysql 存储过程 call,mysql-CALL上的存储过程错误

我正在尝试调用成功编译的过程,但是在调用时出现此错误:

查询:调用proc5

错误代码:1064

您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册,以在第1行的’NULL’附近使用正确的语法

这是我的存储过程:

DELIMITER $$

CREATE DEFINER = `root` @`localhost` PROCEDURE `proc5` ()

BEGIN

DECLARE done BOOL DEFAULT FALSE ;

DECLARE tablename VARCHAR (100) ;

DECLARE tracktables CURSOR FOR

SELECT

TABLE_NAME

FROM

information_schema.TABLES

WHERE TABLE_SCHEMA = 'db1' ;

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = TRUE ;

OPEN tracktables ;

myloop :

LOOP

FETCH tracktables INTO tablename ;

IF done

THEN CLOSE tracktables ;

LEAVE myloop ;

END IF ;

SET @s = CONCAT(

'INSERT INTO db2.test1 SELECT * FROM ',

@tablename

) ;

PREPARE stmt1 FROM @s ;

EXECUTE stmt1 ;

DEALLOCATE PREPARE stmt1 ;

END LOOP ;

END $$

DELIMITER ;

实际上,我想从数据库中选择所有表,然后使用MySQL游标将这些表插入到另一个数据库中的一个表中.当我调用此存储过程时,出现上述错误.

解决方法:

问题是您正在混合声明的变量和即兴@vars.

var->表名不等于var-> @tablename.

将设置行更改为:

SET @s = CONCAT(

'INSERT INTO db2.test1 SELECT * FROM `'

,tablename

,'`'

) ;

现在应该可以了.

反引号`不需要,但以防万一.

标签:cursor,mysql,stored-procedures

来源: https://codeday.me/bug/20191207/2087277.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>