MySQL 存储过程使用 IN 变量名而不是值

标签 mysql stored-procedures

我定义了以下存储过程:

DROP PROCEDURE IF EXISTS `Create_Domain_Table`;
DELIMITER ;;
PROCEDURE `Create_Domain_Table`(IN newTable VARCHAR(255))
BEGIN
       CREATE TABLE newTable LIKE `domain_template`;
END;;
DELIMITER ;

但是当我调用程序时,例如

CALL Create_Domain_Table('test_domain_table');

它创建一个名为 newtable 而不是 test_domain_table 的新表。

我的语法有问题还是我引用的参数不正确?

谢谢

最佳答案

在此使用动态 SQL

DROP PROCEDURE IF EXISTS `Create_Domain_Table`;
DELIMITER ;;
CREATE PROCEDURE `Create_Domain_Table`(IN newTable VARCHAR(255))
BEGIN

   SET @sql = CONCAT('CREATE TABLE `', newTable,'` LIKE domain_template');

   PREPARE stmt FROM @sql;
   EXECUTE stmt;
   DEALLOCATE PREPARE stmt;

END;;
DELIMITER ;

关于MySQL 存储过程使用 IN 变量名而不是值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15663124/

相关文章:

sql - 如何向 mysql 5 存储过程中运行的查询传递限制?

sql - 如何通过存储过程中的SQL结果 "iterate"但避免使用游标?

sql - 在同一域的两台主机上的 Windows 和 Linux 服务器之间进行身份验证 - 可能吗?

php - 每次加载网页时都会插入空记录

php - 将经度、纬度和电话号码发送到 mysql 数据库 - Android

java - 以编程方式启动和取消 toast

java - 执行存储过程时调用异常时获取错误数量或类型的参数

oracle - 创建 Oracle PL/SQL 存储过程

mysql - SQL 查询 - 如何获得评分最高的项目?

java - 如果可能的话,如何将 MySQL 查询结果保存在 int 变量中