Процедура создания ОШИБКА 1046 (3D000): база данных не выбрана
Я пытаюсь создать простую процедуру, которая создаст новую базу данных. Полный код, который я пытаюсь запустить поверх 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);
Я воспользовался помощью, как использовать переменную в операторе создания базы данных для создания этой процедуры. При выполнении этой процедуры над MySQL я получаю ошибку:
ERROR 1046 (3D000): No database selected
Я много гуглил, но не могу это исправить. Пробуя разные вещи, я попытался выполнить вышеописанную процедуру, выполнив сначала:
mysql> USE mysql;
Используя это, ошибка исчезла. А также
mysql> show databases;
отображает все базы данных вместе с вновь созданной базой данных. Может кто-нибудь сказать мне, правильно ли использовать mysql в качестве базы данных по умолчанию или нет. Если у кого-то есть другой метод, пожалуйста, скажите мне.
2 ответа
Использовать:: use database
выбрать базу данных, в которую вы хотите создать процесс, или
попробуйте использовать databasename.
create procedure databasename.create_db(name TEXT)
Я не верю, что у вас могут быть функции, которые являются "ГЛОБАЛЬНЫМИ", то есть выходят за рамки базы данных, поэтому невозможно выбрать базу данных перед вызовом вашей функции, это невозможно