2013-07-01 75 views
-1

我想創建一個簡單的過程,將創建一個新的數據庫。 我正努力超過運行mysql完整的代碼是:創建過程錯誤1046(3D000):沒有選擇數據庫

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作爲默認數據庫是否正確。 如果有人有另一種方法,請告訴我。

回答

3

使用:: use database選擇您要創建的PROC該數據庫或

嘗試使用databasename.

create procedure databasename.create_db(name TEXT) 
0

我不相信你可以有一個是「全局函數「即不在數據庫的範圍內,因此在調用函數之前不要選擇數據庫是不可能的

相關問題