简体   繁体   English

在存储过程中传递参数

[英]Passing arguments in Stored Procedure

As apart of a larger task, I am trying to create a MySQL stored procedure that creates a table. 作为一项较大的任务,我正在尝试创建一个创建表的MySQL存储过程。 I would like to pass the table's name in the procedure call. 我想在过程调用中传递表的名称。

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;

and then there is the call: 然后有电话:

CALL SP_CREATE_TABLE('data');

The procedure works if I hard code `@table_name, but refuses to take the passed parameters. 如果我对`@table_name进行硬编码,则该过程有效,但是拒绝采用传递的参数。

I am on MySQL 6. Any input? 我正在使用MySQL6。是否有输入?

Try this: 尝试这个:

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 ;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM