Jeśli chcesz „wcześniejszego wyjścia” w sytuacji, w której nie wystąpił błąd, użyj zaakceptowanej odpowiedzi przesłanej przez @piotrm. Najczęściej jednak wyskakuje błąd z powodu błędu (szczególnie w procedurze SQL).
Od wersji MySQL v5.5 możesz zgłosić wyjątek. Negowanie obsługi wyjątków itp., Które dadzą ten sam wynik, ale w czystszy, bardziej przejmujący sposób.
Oto jak:
DECLARE CUSTOM_EXCEPTION CONDITION FOR SQLSTATE '45000';
IF <Some Error Condition> THEN
SIGNAL CUSTOM_EXCEPTION
SET MESSAGE_TEXT = 'Your Custom Error Message';
END IF;
Uwaga SQLSTATE '45000'
oznacza „Nieobsłużony warunek wyjątku zdefiniowanego przez użytkownika”. Domyślnie spowoduje to wyświetlenie kodu błędu 1644
(co ma to samo znaczenie). Zauważ, że możesz zgłosić inne kody warunków lub kody błędów, jeśli chcesz (plus dodatkowe szczegóły dotyczące obsługi wyjątków).
Więcej na ten temat znajdziesz w:
https://dev.mysql.com/doc/refman/5.5/en/signal.html
Jak zgłosić błąd w funkcji MySQL
http://www.databasejournal.com/features/mysql/mysql-error-handling-using-the-signal-and-resignal-statements.html
Uzupełnienie
Kiedy ponownie czytam ten post, zdałem sobie sprawę, że mam coś więcej do dodania. Przed MySQL v5.5 istniał sposób na emulację zgłaszania wyjątku. To nie jest dokładnie to samo, ale to był analog: Utwórz błąd, wywołując procedurę, która nie istnieje. Nazwij procedurę, używając nazwy, która jest znacząca, aby uzyskać przydatne środki umożliwiające określenie, na czym polegał problem. Gdy wystąpi błąd, zobaczysz linię niepowodzenia (w zależności od kontekstu wykonania).
Na przykład:
CALL AttemptedToInsertSomethingInvalid;
Zauważ, że kiedy tworzysz procedurę, na takich rzeczach nie jest wykonywana walidacja. Tak więc, podczas gdy w czymś takim jak język kompilowany nigdy nie można wywołać funkcji, której nie było, w takim skrypcie po prostu zakończy się niepowodzeniem w czasie wykonywania, co jest dokładnie tym, co jest pożądane w tym przypadku!
IF tablename IS NOT NULL THEN
...;)