mysql - 在存储过程中传递参数

标签 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。有什么意见吗?

最佳答案

试试这个:

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 ;

关于mysql - 在存储过程中传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25925711/

相关文章:

php - 更改 MySQL 表列以匹配另一个表中的 id

mysql - 拒绝访问;您需要(至少一项) super 权限

sql - LINQ-to-SQL 类中的级联删除/更新

mysql - 使用相同的查询获取 mysql 中的限制总数?

mysql - 在 jruby 上安装 mysql 有很多错误

mysql - 自动向单元格添加 +1 的重复键?

sql - 想要处理一个大的 appengine 日志文件

java - 是否可以像 Java 类型一样命名数据库表?

Mysql存储过程获取表名作为参数

PHP MySQL - 如何按计算字段对分页结果进行排序?