Hata olmayan bir durum için "erken çıkış" istiyorsanız, @piotrm tarafından gönderilen kabul edilmiş yanıtı kullanın. Bununla birlikte, en tipik olarak, bir hata durumu nedeniyle (özellikle bir SQL prosedüründe) kefalet ödeyeceksiniz.
MySQL v5.5'ten itibaren bir istisna atabilirsiniz. Aynı sonucu daha temiz ve daha dokunaklı bir şekilde elde edecek istisna işleyicileri vb.
Bunu nasıl yapacağınız aşağıda açıklanmıştır:
DECLARE CUSTOM_EXCEPTION CONDITION FOR SQLSTATE '45000';
IF <Some Error Condition> THEN
SIGNAL CUSTOM_EXCEPTION
SET MESSAGE_TEXT = 'Your Custom Error Message';
END IF;
Not SQLSTATE '45000'
, "İşlenmemiş kullanıcı tanımlı istisna koşulu" na eşittir. Varsayılan olarak, bu bir hata kodu üretecektir 1644
(aynı anlama sahiptir). İsterseniz başka koşul kodlarını veya hata kodlarını (artı istisna işleme için ek ayrıntılar) atabileceğinizi unutmayın.
Bu konu hakkında daha fazla bilgi için şunlara göz atın:
https://dev.mysql.com/doc/refman/5.5/en/signal.html
MySQL işlevi içinde bir hata nasıl oluşturulur
http://www.databasejournal.com/features/mysql/mysql-error-handling-using-the-signal-and-resignal-statements.html
ek
Bu yazımı yeniden okurken ekleyeceğim ek şeyler olduğunu fark ettim. MySQL v5.5'ten önce, bir istisna atmayı taklit etmenin bir yolu vardı. Tam olarak aynı şey değil, ama bu analogdu: Varolmayan bir prosedürü çağırarak bir hata yaratın. Sorunun ne olduğunu belirlemek için faydalı bir yol elde etmek için prosedürü anlamlı bir adla çağırın. Hata oluştuğunda, hata satırını göreceksiniz (yürütme içeriğinize bağlı olarak).
Örneğin:
CALL AttemptedToInsertSomethingInvalid;
Bir prosedür oluşturduğunuzda, bu tür şeyler üzerinde herhangi bir doğrulama yapılmadığını unutmayın. Dolayısıyla, derlenmiş bir dil gibi bir şeyde, orada olmayan bir işlevi asla çağıramazsınız, böyle bir komut dosyasında, çalışma zamanında basitçe başarısız olur, bu durumda tam olarak istenen şey budur!
IF tablename IS NOT NULL THEN
...;)