2009-12-12 48 views
2

我想在mysql管理員中創建存儲過程。我在POWWEB.com上託管一個網站。爲此,我試圖在mysqladmin中創建存儲過程。在mysqladmin中創建存儲過程?

Mysql版本是5.0.45。我可以用一行代碼創建一個存儲過程。

CREATE PROCEDURE TEST(input INT) 
    INSERT INTO TEST(COL1) VALUES(input); 

但是這是沒有用的。我想用更多的命令編寫一個存儲過程。所以我嘗試像

CREATE PROCEDURE TEST(input INT) 
BEGIN 
    INSERT INTO TEST(COL1) VALUES(input); 
    INSERT INTO TEST1(COL1) VALUES(input); 
    INSERT INTO TEST2(COL1) VALUES(input); 
END 

但是這給了一個語法錯誤。但是相同的代碼在我的本地機器上工作正常。 請讓我知道如果你有任何想法如何解決這個問題。任何幫助或建議,不勝感激。

回答

2

默認分隔符是;,所以它將代碼解釋爲多個查詢,這顯然不起作用。嘗試這樣的:

delimiter // 
CREATE PROCEDURE TEST(input INT) 
BEGIN 
    INSERT INTO TEST(COL1) VALUES(input); 
    INSERT INTO TEST1(COL1) VALUES(input); 
    INSERT INTO TEST2(COL1) VALUES(input); 
END// 
+0

DELIMITER //給出錯誤。有沒有其他選擇。 – Vinodtiru 2009-12-12 11:26:05

+0

什麼錯誤?這對我來說可以。 – 2009-12-12 11:27:20

+0

你的SQL查詢似乎有錯誤。下面的MySQL服務器的錯誤輸出,如果有任何,也可以幫助你診斷問題 錯誤:未知的標點符號字符串@ 11 STR:// SQL://分隔符 CREATE PROCEDURE TEST(輸入INT) BEGIN INSERT INTO TEST(COL1)VALUES(input); SQL查詢: 定界符// CREATE PROCEDURE TEST(input INT)開始插入測試(COL1)VALUES(input); MySQL說: #1064 - 你的SQL語法錯誤;檢查與你的MySQL服務器版本相對應的手冊,在正確的語法附近使用'delimiter // CREATE PROCEDURE TEST(輸入INT) BE – Vinodtiru 2009-12-12 11:36:51

1

忽略PHPMyAdmin,它是像摩托車菸灰缸一樣沒用。登錄到您的shell並使用mysql命令行界面,這是腳本化mysql唯一可支持的正確方式。

DELIMITER命令不是mysql服務器命令,它是一個mysql命令行客戶端命令。要使用它,你必須使用適當的mysql命令行客戶端。

否則很難(雖然不是不可能)創建存儲過程。

+0

無法投票足夠高。浪費了一個小時,試圖讓它在phpmyadmin上工作 – Pasta 2012-02-14 10:23:14

+0

它並不明顯,但是(至少在phpmyadmin v4.0.4.1中)帶有多個查詢的存儲過程在將'BEGIN'''' END'塊放在其周圍時工作正常。 – 2014-03-20 09:50:56

1

在phpMyAdmin中,在SQL編輯器中,可以在標記爲「分隔符」的表單字段中設置分隔符。這是默認的。將它設置爲你喜歡的任何東西,不要在你的SQL中鍵入分隔符,但是以分隔符END結束sql,END //其中//是你選擇的分隔符。

1

最好的答案就是@巴里的評論:

Stored procedures with multiple queries work fine when putting a BEGIN .. END block around it. – Barry Staes

另外,;在每個查詢結束。

例如:

BEGIN 
    INSERT INTO passenger (fname,lname,tel,ID,sex) 
    VALUES (fname,lname,tel,ID, sex); 
    INSERT INTO passenger 
    select * from reservation where 1; 
END