|
<< İçindekileri Görüntülemek İçin Tıklayın >> Yer: Teknik Kılavuzlar > IVEDI SQL Kullanıcı Kılavuzu > 8. Yordamsal dil (PSQL) > 8.5 İstisna işleme |
WHEN ANY DO <deyim>
WHEN EXCEPTION <ad> [, <ad> …] DO <deyim>
WHEN SQLCODE <n> [, <n> …] DO <deyim>
WHEN SQLSTATE '<durum>' [, …] DO <deyim>
WHEN EXCEPTION a | SQLCODE -802 | ANY DO <deyim> -- birleşik süzgeçDO zorunludur. İşleyiciler bloğun en sonunda olmalıdır: son
WHEN'den sonra yalnızca END gelebilir. İşleyici gövdesi sıradan bir PSQL
deyimi olduğu için iç içe geçebilir. WHEN EXCEPTION hem katalogdaki
CREATE EXCEPTION nesnelerini hem motorun yerleşik durum adlarını
(DIVIDE_BY_ZERO gibi) kabul eder; ikisinde de olmayan bir ad derleme uyarısı alır ve
o dal hiç eşleşmez. GDSCODE yoktur.
İşleyici içinde kullanılabilen bağlam değişkenleri:
| Ad | Tip | Değer |
|---|---|---|
SQLERROR | nesne adı | İstisnanın adı (örn. 'NOT_A_NUMBER') |
SQLERRM | nesne adı | Mesaj metni |
SQLCODE | INTEGER | Sayısal hata kodu |
SQLSTATE | durum kodu | SQLSTATE biçimli kod |
ERROR | EXCEPTION nesnesi |
.name, .code, .state, .message,
.getStackTrace() |
Sonlanma koşulu olmayan bir özyineleme (kendini çağıran bir yordam, birbirini tetikleyen
tetikleyiciler, sonsuz iç içe bir ifade) süreci düşürmez: motor, özyinelemenin girdiği yerlerde
iş parçacığının yığın kullanımını ölçer ve sınır aşılınca STACK_DEPTH_EXCEEDED
istisnasını yükseltir — SQLCODE 704, SQLSTATE
54001. Sıradan bir istisnadır:
WHEN SQLSTATE '54001', WHEN SQLCODE 704 ya da WHEN ANY
ile yakalanabilir. Sınır, iş parçacığının yığın boyutundan türetilir ve SQL'den ayarlanamaz;
1 MB'lik varsayılan yığında 768 KB'dir.
EXCEPTION <ad>; -- bildirilmiş mesajı kullanır
EXCEPTION <ad> <mesaj ifadesi>;
EXCEPTION <ad> <kalıp> USING ( <e1>, <e2>, … ); -- {0} yer tutucuları
EXCEPTION <ad> [<mesaj>] [CODE <tam sayı>] [STATE <dizge>]; -- kod/durum ezme
EXCEPTION; -- yeniden yükselt (yalnızca işleyicide)Kullanıcı istisnaları CREATE EXCEPTION <ad> '<mesaj>' [CODE <n>]
[STATE '<5 karakter>'] ile oluşturulur; mesaj zorunludur, CODE 0 yasaktır.
SQLCODE ve SQLSTATE anahtar sözcükleri CODE/STATE
yerine de yazılabilir. Çözüm sırası: yükseltmedeki ezme > tanımdaki değer > varsayılan
(SQLCODE 20000, SQLSTATE 45000). İkisi de işleyicideki
bağlam değişkenlerine ve WHEN SQLCODE/WHEN SQLSTATE eşleşmesine akar.