在存储过程中传递参数

时间:2014-09-19 03:04:37

标签: mysql sql stored-procedures

作为一项大型任务的一部分,我正在尝试创建一个创建表的MySQL存储过程。我想在程序调用中传递表格的名称。

CREATE PROCEDURE SP_CREATE_TABLE(IN tableName VARCHAR(100))
    SET @table_name = tableName;
    SET @query = CONCAT('CREATE TABLE IF NOT EXISTS meta_', @table_name, '(`created` DATETIME, `modified` DATETIME, `enabled` TINYINT(1) DEFAULT 1);');
    PREPARE stmt FROM @query;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;

然后有电话:

CALL SP_CREATE_TABLE('data');

如果我硬编码`@table_name,但拒绝接受传递的参数,则该过程有效。

我在MySQL 6.任何输入?

1 个答案:

答案 0 :(得分:1)

试试这个:

DELIMITER $$
 CREATE PROCEDURE SP_CREATE_TABLE(IN tableName VARCHAR(100))
 BEGIN
  SET @table_name = tableName;
  SET @query = CONCAT('CREATE TABLE IF NOT EXISTS meta_', @table_name, '(`created` DATETIME, `modified` DATETIME, `enabled` TINYINT(1) DEFAULT 1);');
  PREPARE stmt FROM @query;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;
 END $$
DELIMITER ;