创建过程ERROR 1046(3D000):未选择任何数据库

时间:2013-07-01 10:23:06

标签: mysql mysql-error-1046

我正在尝试创建一个可以创建新数据库的简单过程。 我试图在mysql上运行的完整代码是:

SET @DB_NAME := "mydb";
SET @DB_CREATE:= "CREATE DATABASE ";

DELIMITER //

drop procedure if exists create_db //

create procedure create_db(name TEXT)
BEGIN
  DECLARE temp TEXT;
  DECLARE user TEXT;
  SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = name INTO temp;
  if temp = name then
  SIGNAL SQLSTATE '45002' SET MESSAGE_TEXT = 'This database already exist';
    else
    SELECT USER() INTO user;

    SET @s = CONCAT('CREATE DATABASE ', name);
    PREPARE stmt_create FROM @s;
    EXECUTE stmt_create;
    DEALLOCATE PREPARE stmt_create;

    SET @s = CONCAT('GRANT ALL PRIVILEGES ON ', name, '.* TO ', user, ' WITH GRANT     OPTION');
    PREPARE stmt_grant FROM @s;
    EXECUTE stmt_grant;
    DEALLOCATE PREPARE stmt_grant;

  END IF;
END //

DELIMITER ;

call create_db(@DB_NAME);

我借助how do I use a variable in create database statement来创建此过程。 在mysql上运行此过程时,我收到错误:

ERROR 1046 (3D000): No database selected

我已经google了很多但是无法修复它。 在尝试不同的事情时,我尝试通过首先执行上述过程来执行:

mysql> USE mysql;

使用它,错误消失了。并且

mysql> show databases;

显示所有数据库以及新创建的数据库。有人可以告诉我使用mysql作为默认数据库是否正确。 如果有人有其他方法,请告诉我。

2 个答案:

答案 0 :(得分:3)

使用:: use database选择要创建proc的数据库或

尝试使用databasename.

create procedure databasename.create_db(name TEXT)

答案 1 :(得分:0)

我不相信你可以拥有“GLOBAL”的功能,即在数据库范围之外,所以在调用你的函数之前不能选择数据库