хранимая процедура mysql: параметр out

У меня есть хранимая процедура 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 ;

Процедура компилируется нормально. (Я использую MySQL Query Browser в Ubuntu).

Однако, когда я вызываю процедуру:

CALL my_sqrt(4,@out_value);

(также в браузере запросов)

Возвращает ошибку:

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

Почему этот пример не работает?

Ответы на вопрос(6)

не используйте @. В моем случае это возвращает 0

CALL SP_NAME (L_OUTPUT_PARAM)

а не MySQL Query Browser, и это работает. Похоже, я что-то не так делаю в этой программе ...

Я не знаю, что, поскольку я успешно вызывал некоторые процедуры раньше (но там, где нет выходных параметров) ...

Для этого я вошел

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); 

В результате появится сообщение: «Запрос отменен»

Я думаю, сейчас я буду использовать только терминал ...

Решение Вопроса

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)

Возможно, вам следует вставить все сообщение об ошибке, а не суммировать его.

 13 мая 2014 г., 11:42
была такая же проблема с QueryBrowser.
 domagojk11 июл. 2009 г., 16:28
Вот вся ошибка: у вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса, который можно использовать рядом с «SELECT @ out_value»; в строке 2
 11 июл. 2009 г., 16:34
Хорошо. Мне кажется, это как-то связано с твоим пребыванием в Query Browser. Попробуйте это из инструмента командной строки mysql.
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) 
 12 мая 2016 г., 14:24
и SQL-запрос является CALL my_sqrt (4, @ out_value);

что это старая ветка, но если кто-то ищет ответ, почему его процедуры не работают в рабочей среде, и думает, что единственный результат - это "Запрос отменен" или что-нибудь подобное без подсказок:

вывод с ошибками или проблемами скрыт. Я не знаю, почему, я понимаю, это раздражает, но оно есть. просто наведите курсор на строку над сообщением, оно превратится в двойную стрелку (вверх и вниз), затем вы можете нажать и перетащить эту строку вверх, после чего вы увидите консоль с пропущенным сообщением!

риведенном ниже коде отсутствует IN.

CREATE PROCEDURE my_sqrt(IN input_number INT, OUT out_number FLOAT)
 12 мая 2016 г., 19:47
IN не является обязательным, ничто перед параметром не подразумевает IN
 13 мая 2016 г., 08:26
Итак, как мы можем отличить, что параметр для ввода или вывода ...?
 13 мая 2016 г., 13:40
Это плохая практика, я согласен, но запрос все равно будет действительным.

Ваш ответ на вопрос