mysql stored-procedure:out参数

时间:2009-07-11 12:02:55

标签: mysql stored-procedures

我有一个mysql存储过程(google book),其中一个例子就是:

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 Query Browser。)

然而,当我打电话给程序时:

CALL my_sqrt(4,@out_value);

(也在查询浏览器中)

它返回错误:

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

为什么这个例子不起作用?

6 个答案:

答案 0 :(得分:35)

无法复制。它对我来说很好:

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)

也许您应该粘贴整个错误消息,而不是总结它。

答案 1 :(得分:6)

您必须使用正确的签名输入参数* IN在以下代码中缺失。

CREATE PROCEDURE my_sqrt(IN input_number INT, OUT out_number FLOAT)

答案 2 :(得分:2)

我知道这是一个旧线程,但如果有人正在寻找他们的程序在工作台中不起作用的答案,并认为唯一的结果是“查询已取消”或类似的事情没有线索:

隐藏有错误或问题的输出。我不知道为什么,我确实理解这很烦人,但它确实存在。只需将光标移到消息上方的行上方,它就会转入双箭头(向上和向下),然后您可以单击并向上拖动该行,然后您将看到一个控制台,其中包含您错过的消息!

答案 3 :(得分:1)

我只是尝试在终端而不是MySQL查询浏览器中调用函数,它可以工作。 所以,看起来我在那个程序中做错了......

我不知道自从我成功之前调用了一些程序(但是那里没有out参数)...

对于我已经进入的那个

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

导致错误:

  

您的SQL语法有错误;   检查对应的手册   您的MySQL服务器版本   正确的语法在'SELECT附近使用   第2行的@out_value'

奇怪的是,如果我只写:

CALL my_sqrt(4,@out_value); 

结果消息为:“查询已取消”

我想,现在我只会使用终端......

答案 4 :(得分:0)

如果您是从存储过程中调用的,请不要使用@。就我而言,它返回0

调用SP_NAME(L_OUTPUT_PARAM)

答案 5 :(得分:0)

尝试将OUT参数定义的INOUT更改为out_number

CREATE PROCEDURE my_sqrt(input_number INT, INOUT out_number FLOAT)

INOUT表示out_number(在您的情况下为@out_value)的输入变量也将用作输出变量,您可以从中选择值。