gpt4 book ai didi

mysql - CALL 上的存储过程错误

转载 作者:可可西里 更新时间:2023-11-01 08:21:24 25 4
gpt4 key购买 nike

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

查询:调用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 Cursors 将这些表插入到另一个数据库中的一个表中。当我调用此存储过程时,出现上述错误。

最佳答案

问题是您将声明的变量和即兴的@vars 混合在一起。

var -> tablename 不等于 var -> @tablename

将设置行更改为:

SET @s = CONCAT(
'INSERT INTO db2.test1 SELECT * FROM `'
,tablename
,'`'
) ;

现在它应该可以工作了。

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

关于mysql - CALL 上的存储过程错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7569072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com