我正在尝试创建一个可以创建新数据库的简单过程。 我试图在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作为默认数据库是否正确。 如果有人有其他方法,请告诉我。
答案 0 :(得分:3)
使用:: use database
选择要创建proc的数据库或
尝试使用databasename.
create procedure databasename.create_db(name TEXT)
答案 1 :(得分:0)
我不相信你可以拥有“GLOBAL”的功能,即在数据库范围之外,所以在调用你的函数之前不能选择数据库