我在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;
然后我可以看到我传入过程的参数名称是进入存储过程但是它怎么没有工作?
我可能在这里遗漏了一些明显的东西,但是...会得到一些帮助。
答案 0 :(得分:1)
您无法像这样创建动态SQL。您必须使用EXECUTE IMMEDIATE 'some dynamic sql stmt'
你传递一个字符串,所以在你的存储过程中建立你的sql,如下所示:
EXECUTE IMMEDIATE concat('CREATE SCHEMA IF NOT EXISTS ', p, ' DEFAULT CHARACTER SET latin1');
与您的其他CREATE
语句类似