it-swarm.com.ru

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

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

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

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

CALL my_sqrt(4,@out_value);

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

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

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

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

26
domagojk

Невозможно воспроизвести. У меня все работало нормально

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)

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

35
chaos

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

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

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

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

2
SomeOne_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) 
1
Noby Nirmal

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

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

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

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

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

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

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

CALL my_sqrt(4,@out_value); 

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

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

1
domagojk

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

CALL SP_NAME (L_OUTPUT_PARAM) 

0
www.shipshuk.com