如何在查询内部过程中使用过程参数变量

时间:2014-02-06 12:04:19

标签: php mysql stored-procedures

我正在创建一个在mysql中备份表的过程。

我的代码是:

DELIMITER $$
CREATE PROCEDURE `backup_table`(current_name VARCHAR(50), backup_name VARCHAR(50))
BEGIN 
    CREATE TABLE `@backup_name` LIKE `@current_name`;
    INSERT INTO `@backup_name` SELECT * FROM `@current_name`;
END $$
DELIMITER;

CALL backup_table('users', 'users_bak');

程序已成功创建但当我尝试使用我的表名作为参数调用该过程时,它会抛出错误:

Query : call backup_table('users', 'users_bak')
Error Code : 1146
Table 'database.@current_name' doesn't exist

我已经使用了没有@符号的程序,但没有工作。

那么,请告诉我,如何在查询中使用参数变量作为表名。 请帮帮我们!!!!

1 个答案:

答案 0 :(得分:0)

谢谢大家!

我已经在@ wchiquito对sql prepare语句的帮助评论的帮助下自己解决了我的问题。

见下面的代码:

DELIMITER //
CREATE PROCEDURE `backup_table`(current_name VARCHAR(50), backup_name VARCHAR(50))
BEGIN 
    SET @ct = CONCAT('CREATE TABLE ', backup_name, ' LIKE ', current_name);
    SET @it = CONCAT('INSERT INTO ', backup_name, ' SELECT * FROM ', current_name);
    PREPARE create_t FROM @ct;
    EXECUTE create_t;
    PREPARE insert_t FROM @it;
    EXECUTE insert_t;
END;


CALL backup_table('users', 'users_bak');

我发布的答案是因为, 也许这会对另一个人有帮助!!!