mysql存储过程调用无法访问参数值

时间:2011-06-22 04:00:29

标签: mysql stored-procedures

我在mysqldb上有一个名为create_new_db(p VARCHAR(45))的存储过程。语法如下。

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `create_new_db`( p VARCHAR(45))

BEGIN

CREATE SCHEMA IF NOT EXISTS p DEFAULT CHARACTER SET latin1 ;

-- -----------------------------------------------------
-- Table `p`.`events`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS p.events ( yada, yada, ...)

当我使用

调用存储过程时
Call mysqldb.create_new_db('new_db_name');

执行该过程,创建数据库和表,但不传入我传入的参数。创建的数据库名为p,而不是我传入过程

的名称参数

我尝试将参数分配给脚本中的全局变量

@P = p;

然后我可以看到我传入过程的参数名称是进入存储过程但是它怎么没有工作?

我可能在这里遗漏了一些明显的东西,但是...会得到一些帮助。

1 个答案:

答案 0 :(得分:1)

您无法像这样创建动态SQL。您必须使用EXECUTE IMMEDIATE 'some dynamic sql stmt'

你传递一个字符串,所以在你的存储过程中建立你的sql,如下所示:

EXECUTE IMMEDIATE concat('CREATE SCHEMA IF NOT EXISTS ', p, ' DEFAULT CHARACTER SET latin1');

与您的其他CREATE语句类似