Процедура создания ОШИБКА 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)

Я не верю, что у вас могут быть функции, которые являются "ГЛОБАЛЬНЫМИ", то есть выходят за рамки базы данных, поэтому невозможно выбрать базу данных перед вызовом вашей функции, это невозможно

Другие вопросы по тегам