7

Bir istisna oluşturduğumda özel koşullar oluşturmak mümkün mü? Aşağıdaki örneği inceleyelim: BuradaPostgreSQL özel kural dışı durum koşulları

BEGIN  
    y := x/0; 
EXCEPTION 
    WHEN division_by_zero THEN 
     RAISE NOTICE 'caught division_by_zero'; 
     RETURN x; 
END; 

Ben durum yakalamak için 'division_by_zero' koşulunu kullanın.

BEGIN  
    [...] 
    RAISE custom_condition; 
EXCEPTION 
    WHEN custom_condition THEN 
     [...] 
END; 

Mümkün standart istisnalar karışmaz böylece: ben yapmak istiyorum ne böyle bir şeydir. Ben sadece yapabilirim: = 1/0; ve division_by_zero'yu yakalayın, ancak doğru görünmüyor.

cevap

15
begin 
    if $1='bar' then 
     raise exception using 
      errcode='NOBAR', 
      message='Bar is prohibited', 
      hint='We do not talk to this guy'; 
    end if; 
exception 
    when sqlstate 'NOBAR' then 
     update nobar_raised set count=count+1; 
end; 

diğer bilgiler:

+10

teşekkürler! Bir düzeltme ile çalışır - * errcode * parametresi tam olarak beş basamaklı/büyük harfli ASCII karakterleri olmalıdır, aksi halde bir hataya neden olur ("geçersiz SQLSTATE kodu"). İşte bağlantınızdan bir not: 'Not: SQLSTATE koduyla bir hata kodu belirlerken, önceden tanımlanmış hata kodları ile sınırlı değildir, ancak beş basamak ve/veya büyük harf ASCII harflerinden oluşan herhangi bir hata kodunu seçebilirsiniz. 00000'den fazla hata kodları atmaktan kaçınmanız tavsiye edilir, çünkü bunlar kategori kodlarıdır ve yalnızca tüm kategoriyi yakalayarak yakalanabilirler. ' – Snifff

+0

@Sniff: Teşekkürler - Hatalı kodlama karakterlerini düzeltdim – Tometzky

+0

@Tometzky: exception.diagnostic altındaki hangi özellik 'Bar yasaklandı' gösterisi altında? MESSAGE_TEXT mi yoksa PG_EXCEPTION_DETAIL mi yoksa PG_EXCEPTION_HINT mi? (dokümanlar: http://goo.gl/F5w1y) – obimod

İlgili konular