现在想通过调用存储过程生成数据库,数据库的名称是存储过程的参数:如下所示:
create database databasename;
我的本意是想通过databasename这个变量将数据库的名称传过来,但每当执行到该句,就给我生成了一个我叫databasename的数据库,这不是我想要的。比如,databasename=hello123,则给我生成一个名叫hello123的数据库,怎么实现?

解决方案 »

  1.   

    set @ee=concat('create database ','dd');
    prepare dd from @ee;
    execute dd
      

  2.   

    DELIMITER $$
    DROP PROCEDURE IF EXISTS p_createDatabase $$CREATE PROCEDURE p_createDatabase(databaseName VARCHAR(64))
    BEGIN
        SET @cmd = CONCAT('CREATE DATABASE `',databaseName,'`'); 
        PREPARE stmt FROM @cmd;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
    END$$
    DELIMITER ;
      

  3.   

    谢谢,但为什么我运行时会提示:This command is not supported in the prepared statement protocol yet。会不会是我的mysql版本不够高,你运行那个存储过程时用的是那个版本的呀,我的是5.0
      

  4.   

    谢谢,但为什么我运行时会提示:This command is not supported in the prepared statement protocol yet。会不会是我的mysql版本不够高,你运行那个存储过程时用的是那个版本的呀,我的是5.0
      

  5.   

    5.1.12起prepare 中才支持 create databaseAs of MySQL 5.1.12, the following additional statements are supported: CACHE INDEX
    CHANGE MASTER
    CHECKSUM {TABLE | TABLES}
    {CREATE | DROP} DATABASE
    {CREATE | RENAME | DROP} USER
    FLUSH {TABLE | TABLES | TABLES WITH READ LOCK | HOSTS | PRIVILEGES
      | LOGS | STATUS | MASTER | SLAVE | DES_KEY_FILE | USER_RESOURCES}
    GRANT
    REVOKE
    KILL
    LOAD INDEX INTO CACHE
    RESET {MASTER | SLAVE | QUERY CACHE}
    SHOW BINLOG EVENTS
    SHOW CREATE {PROCEDURE | FUNCTION | EVENT | TABLE | VIEW}
    SHOW {AUTHORS | CONTRIBUTORS | WARNINGS | ERRORS}
    SHOW {MASTER | BINARY} LOGS
    SHOW {MASTER | SLAVE} STATUS
    SLAVE {START | STOP}
    INSTALL PLUGIN
    UNINSTALL PLUGIN