Подтвердить что ты не робот

Mysql stored-procedure: out параметр

У меня есть хранимая процедура mysql из этого (книга Google), и один из примеров:

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...

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

4b9b3361

Ответ 1

Невозможно выполнить репликацию. Это сработало хорошо для меня:

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)

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

Ответ 2

Вы должны использовать правильную подпись для входного параметра * IN отсутствует в приведенном ниже коде.

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

Ответ 3

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

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

Ответ 4

Я просто попытался вызвать функцию в терминале, а не в MySQL Query Browser, и он работает. Итак, похоже, что я делаю что-то не так в этой программе...

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

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

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

И это приводит к ошибке:

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL для правильный синтаксис для использования рядом с SELECT @out_value 'в строке 2

Странно, если я пишу просто:

CALL my_sqrt(4,@out_value); 

Сообщение результата: "Отменить запрос"

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

Ответ 5

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) 

Ответ 6

Если вы звоните из хранимой процедуры, не используйте @. В моем случае это возвращает 0

CALL SP_NAME (L_OUTPUT_PARAM)