3

新しいデータベースを作成する簡単な手順を作成しようとしています。私が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);

この手順を作成するために、create database ステートメントで変数を使用する方法を参考にしました。mysql でこの手順を実行しているときに、エラーが発生します。

ERROR 1046 (3D000): No database selected

私はそれをたくさんグーグルで検索しましたが、修正できません。さまざまなことを試している間、最初に実行して上記の手順を実行しようとしました:

mysql> USE mysql;

それを使用すると、エラーはなくなりました。と

mysql> show databases;

新しく作成されたデータベースとともにすべてのデータベースを表示しています。デフォルトのデータベースとしてmysqlを使用することが正しいかどうか誰か教えてください。誰か別の方法があれば教えてください。

4

2 に答える 2

7

::use databaseを使用して、proc を作成するデータベースを選択するか、

使ってみてdatabasename.

create procedure databasename.create_db(name TEXT)
于 2013-07-01T10:34:35.480 に答える
0

「GLOBAL」、つまりデータベースの範囲外の関数を使用できるとは思わないため、関数を呼び出す前にデータベースを選択しないことは不可能です

于 2013-07-01T11:01:40.930 に答える