2014-04-16 299 views
1

在SQL Server中,我可以使用動態sql字符串實現此操作,但現在我需要爲mysql執行相同的操作,但是無法執行任何操作要實現這一目標僅當mysql中不存在過程時才創建存儲過程

IF NOT EXISTS (SELECT 1 FROM mysql.proc p WHERE NAME = 'stored_proc_name') 
BEGIN 
    DELIMITER $$ 
    CREATE PROCEDURE justATest() 
    BEGIN 
-- some SP logic here 
    END$$ 
END 

我存儲整個SQL的數據庫列中的字符串,並執行用事先準備好的聲明Execute另一個存儲過程中的語句。

+0

可能的重複[如何在創建之前檢查存儲過程是否存在](http://stackoverflow.com/questions/2072086/how-to-check-if-a-stored-procedure-exists-before-創建它) – Shishdem

+0

我認爲你提供的鏈接是爲Sql Server而不是MySQL – thickGlass

回答

0

IF NOT EXISTS(SELECT 1 FROM mysql.proc的p其中分貝= 'DB_NAME' AND名稱= 'stored_proc_name')THEN ....

Older Post

0

控制取諸如if then else之類的語句只能在MySQL的存儲過程中使用(不幸的是)。通常有解決方法,但它取決於爲什麼您有條件地創建sproc。

E.g.如果你想避免的錯誤運行構建腳本,因爲存儲過程已經存在,那麼你可以使用一個有條件的DROP語句之前,當你創造這樣的:

DROP PROCEDURE IF EXISTS justATest; 
CREATE PROCEDURE justATest() 
BEGIN 
    -- enter code here 

END; 

這將確保任何改變的代碼獲取運行(而不是跳過)。