У меня очень простой вопрос, но я не получил простого кода для выхода из SP с помощью Mysql. Кто-нибудь может поделиться со мной, как это сделать?
CREATE PROCEDURE SP_Reporting(IN tablename VARCHAR(20))
BEGIN
IF tablename IS NULL THEN
#Exit this stored procedure here
END IF;
#proceed the code
END;
mysql
sql
stored-procedures
Джо Иджам
источник
источник
IF tablename IS NOT NULL THEN
...;)Ответы:
источник
END proc_label;
синтаксис (показанный в большинстве официальных примеров MySQL) не нужен. (это отличный способ закомментировать сохраненный процесс без необходимости прокручивать вниз, чтобы вставить его*/
на место)LEAVE this_proc;
звучит идеально!return <value>
вернуть значение.:
и, такBEGIN
какproc_label:BEGIN
дал синтаксическую ошибку во время работыproc_label: BEGIN
.Если вам нужен «ранний выход» в ситуации, когда ошибки не было, используйте принятый ответ, отправленный @piotrm. Однако чаще всего вы будете выплачивать залог из-за состояния ошибки (особенно в процедуре SQL).
Начиная с MySQL v5.5 вы можете генерировать исключение. Отрицание обработчиков исключений и т. Д., Которые дадут тот же результат, но более четким и острым способом.
Вот как:
Примечание
SQLSTATE '45000'
приравнивается к «Необработанному определенному пользователем условию исключения». По умолчанию это приведет к появлению кода ошибки1644
(который имеет то же значение). Обратите внимание, что вы можете использовать другие коды условий или коды ошибок, если хотите (плюс дополнительные сведения для обработки исключений).Для получения дополнительной информации по этому вопросу посетите:
https://dev.mysql.com/doc/refman/5.5/en/signal.html
Как вызвать ошибку в функции MySQL
http://www.databasejournal.com/features/mysql/mysql-error-handling-using-the-signal-and-resignal-statements.html
добавление
Когда я перечитал этот пост, я понял, что мне нужно добавить еще кое-что. До MySQL v5.5 существовал способ имитации генерации исключения. Это не совсем то же самое, но это был аналог: создать ошибку, вызвав процедуру, которой не существует. Вызовите процедуру по имени, которое имеет смысл, чтобы получить полезные средства для определения проблемы. При возникновении ошибки вы увидите строку сбоя (в зависимости от контекста выполнения).
Например:
CALL AttemptedToInsertSomethingInvalid;
Обратите внимание, что когда вы создаете процедуру, для таких вещей не выполняется проверка. Таким образом, хотя в чем-то вроде скомпилированного языка вы никогда не сможете вызвать функцию, которой не было, в таком сценарии она просто выйдет из строя во время выполнения, что именно то, что нужно в данном случае!
источник
Чтобы справиться с этой ситуацией портативным способом (то есть будет работать со всеми базами данных, потому что он не использует метку MySQL Kung fu), разбейте процедуру на логические части, например:
источник
Почему не это:
источник
if
инструкции. Это логически идентично «раннему возврату».Это работает для меня:
источник
источник