将参数传递给存储过程MySql
我在数据库中创建了带有IN参数的过程(MySql-> Routines-> Create Procedure)。 我正在使用它来创建一个新的数据库。当我调用过程并传递参数 时,会创建新数据库,但新数据库的名称是我在过程中使用的变量的名称,而不是我作为参数传递的名称。将参数传递给存储过程MySql
CREATE PROCEDURE dbCreate (IN dbName VARCHAR(255))
BEGIN
CREATE DATABASE IF NOT EXISTS dbName COLLATE utf8_bin; CREATE TABLE IF NOT EXISTS dbName.City( . . . );
当我调用过程dbCreate的,
USE old_database;
CALL old_database.dbCreate('FRANCE');
MySQL的产生被称为DBNAME新数据库。
构建你的发言,如果它是一个字符串:
SET @s = CONCAT('USE old_database; CALL old_database.dbCreate(', dbName,');');
PREPARE stmt FROM @s;
EXECUTE stmt;
我尝试使用上述语句,但我收到一个错误:“字段列表中的未知列”。我用单引号创建字符串 – user506246
CREATE DEFINER ='user' @''%'程序dbCreate'(dbname中 VARCHAR(255)) BEGIN \t SET @ X ='CREATE DATABASE IF NOT EXISTS? COLLATE utf8_bin'; \t PREPARE语句FROM @x; \t EXECUTE语句USING @dbName; 此代码将变量dbName设置为我传递的参数,但是现在,当我尝试执行过程 – user506246
已解决时,我收到语法错误1064。我使用CONCAT函数来处理数据库中的所有表格。 – user506246
见http://*.com/questions/8363415/why-cant-i-use-a-variable-as-the-table在存储过程中的名称 –