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...
Почему этот пример не работает?
Ответы
Ответ 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)