开发者

Stored procedure error on CALL

开发者 https://www.devze.com 2023-04-08 12:52 出处:网络
I am trying to call a procedure which compiles successfully but on calling I get this error: Query: call proc5

I am trying to call a procedure which compiles successfully but on calling I get this error:

Query: call proc5

Error Code: 1064 You have an error in your SQL syntax; check the manua开发者_运维问答l that corresponds to your MySQL server version for the right syntax to use near 'NULL' at line 1

This is my Stored procedure:

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 ;

Actually, I want to select all the tables from a database and insert those tables into one table which is in another database using MySQL Cursors. And when I call this stored procedure I get the above error.


The problem is that you are mixing declared variables and impromtu @vars.

var -> tablename does not equal var -> @tablename.

Change the set line to:

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

Now it should work.

The backticks ` should not be needed, but are there just in case.

0

精彩评论

暂无评论...
验证码 换一张
取 消