将参数传递给存储过程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新数据库。

+0

见http://*.com/questions/8363415/why-cant-i-use-a-variable-as-the-table在存储过程中的名称 –

构建你的发言,如果它是一个字符串:

SET @s = CONCAT('USE old_database; CALL old_database.dbCreate(', dbName,');'); 
PREPARE stmt FROM @s; 
EXECUTE stmt; 
+0

我尝试使用上述语句,但我收到一个错误:“字段列表中的未知列”。我用单引号创建字符串 – user506246

+0

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

+0

已解决时,我收到语法错误1064。我使用CONCAT函数来处理数据库中的所有表格。 – user506246