MYSQL Ошибка # 2014: в хранимой процедуре, когда набор результатов пуст - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь создать хранимую процедуру в MYSQL (v5.7.21) с помощью phpmyadmin (v4.7.9), которая иногда возвращает пустой набор результатов.

CREATE DEFINER=`my_database`@`%` PROCEDURE `emptytest`(IN `_id` INT(11))
NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER
    select * from my_table where id=_id

и затем вызовите его с помощью:

call emptytest(1);

это прекрасно работает, когда идентификатор существует в таблице:

id  name
--------
1   bob

, но выдает ошибку, когда естьнет строк для возврата:

call emptytest(11);
#2014 - Commands out of sync; you can't run this command now

Однако я ожидаю, что он вернет то же самое, что и выполнение оператора SQL:

select * from my_table where id=11

Что представляет собой пустой список:

id  name
--------
  • Я искал в StackOverflow похожие вопросы, но большинство из них решают проблемы с несколькими запросами, что не в моем случае.

  • НасколькоЯ знаю, что документация MySQL гласит, что процедуры должны иметь возможность возвращать таблицы.

  • Для примера я показываю параметры по умолчанию, используемые phpmyadmin, но я попытался настроить их безрезультатно.

Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Ничего плохого в процедуре.

Это phpMyAdmin, который не обрабатывает хранимые процедуры при выполнении с помощью CALL на вкладке SQL.

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

0 голосов
/ 27 сентября 2018

Хранимые процедуры, как правило, более «суетливы» в отношении ошибок, чем простые операторы (см. Ниже), поэтому вам необходимо добавить обработчик для этой ошибки.

DECLARE EXIT HANDLER FOR 2014 BEGIN select 'empty set' as `Error`; END;

Принцип здесь заключается в том, что вы можете 'на самом деле они обрабатывают ошибки такого рода в простом запросе, поэтому по необходимости они игнорируются;вы можете обращаться с ними в SP, так что, хорошо, обрабатывать их ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...