2009-07-11 215 views
23

我已經從這個(google book)存儲過程MySQL的,並且一個示例是這樣的:MySQL的存儲過程:輸出參數

DELIMITER $$ 

DROP PROCEDURE IF EXISTS my_sqrt$$ 
CREATE PROCEDURE my_sqrt(input_number INT, OUT out_number FLOAT) 
BEGIN 
    SET out_number=SQRT(input_number); 
END$$ 

DELIMITER ; 

程序編譯罰款。 (我在ubuntu中使用MySQL查詢瀏覽器)。

然而,當我打電話的過程:

CALL my_sqrt(4,@out_value); 

(也查詢瀏覽器)

它返回一個錯誤:

(1064) check the manual that correspond to the... 

爲什麼不是這個例子的工作?

回答

29

無法複製。它對我很好:

mysql> CALL my_sqrt(4, @out_value); 
Query OK, 0 rows affected (0.00 sec) 

mysql> SELECT @out_value; 
+------------+ 
| @out_value | 
+------------+ 
| 2   | 
+------------+ 
1 row in set (0.00 sec) 

也許你應該粘貼整個錯誤信息,而不是總結它。

+0

這裏是整個錯誤:您有一個您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,在第2行'SELECT @out_value'附近使用正確的語法。 – domagojk 2009-07-11 14:28:34

+2

好的。這聽起來像是在查詢瀏覽器中處理你的事情。試試從mysql命令行工具。 – chaos 2009-07-11 14:34:36

+0

與QueryBrowser有相同的問題。 – fubo 2014-05-13 09:42:43

1

我只是試圖在終端中調用一個函數,而不是MySQL查詢瀏覽器,它的工作原理。 所以,它看起來像我做錯了在該程序中...

我不知道,因爲我所謂的一些程序才能成功(但其中沒有out參數)...

對於這一個我已經進入

CALL my_sqrt(4,@out_value); 
SELECT @out_value; 

,並返回一個錯誤的結果:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT @out_value' at line 2

奇怪的是,如果我寫的只是:

CALL my_sqrt(4,@out_value); 

結果的信息是:「查詢已取消」

我想,現在我只需要使用終端...

2

我知道這是一個古老的線程,但如果有人正在尋找一個答案爲什麼他們的程序在工作臺不工作,並認爲唯一的結果是「查詢取消」或類似的東西沒有線索:

與錯誤或問題的輸出是hiddenl。我不知道爲什麼,我明白這很煩人,但它在那裏。只需將光標移動到消息上方的一行上方,它將以雙箭頭(向上和向下)轉動,然後單擊並拖動該行,然後您將看到帶有錯過消息的控制檯!

5

對於輸入參數* IN在下面的代碼中缺少必須使用正確的簽名。

CREATE PROCEDURE my_sqrt(IN input_number INT, OUT out_number FLOAT) 
1
SET out_number=SQRT(input_number); 

而是該寫的:

select SQRT(input_number); 

請不要寫SET out_number和你的輸入參數應該是:

PROCEDURE `test`.`my_sqrt`(IN input_number INT, OUT out_number FLOAT)