PL/SQL Exception

Oracle PL/SQL ile yazılan komutlarda ortaya çıkan hataların yönetimi için kullanılan Exception yapısı ile ilgili bilgiler yer alıyor.

Exception

Komutların çalışması sırasında oluşan hataların yönetimi için kullanılan yapılardır.

Exception türleri System-defined ve User-defined olmak üzere ikiye ayrılır.

Exception yapısı

PL/SQL Exception yapısını kullanımı aşağıdaki gibidir.

DECLARE
    -- tanımlamalar
BEGIN
    -- komutlar
EXCEPTION
    WHEN HATA-TURU THEN
        -- komutlar
    WHEN OTHERS THEN
        -- komutlar
END;

Örnek Exception kullanımı aşağıda yer almaktadır.

BEGIN
    DBMS_OUTPUT.put_line(3/0);
EXCEPTION
    WHEN ZERO_DIVIDE THEN
        DBMS_OUTPUT.put_line('Sıfıra bölme hatası.');
    WHEN OTHERS THEN
        DBMS_OUTPUT.put_line('Tanımlanmayan bir hata oluştu.');
END;

System-defined

Oracle PL/SQL tarafından önceden oluşturulan Exception türüne System-defined denir.

System-defined exception türleri aşağıda yer almaktadır.

ACCESS_INTO_NULL, CASE_NOT_FOUND, COLLECTION_IS_NULL, DUP_VAL_ON_INDEX, INVALID_CURSOR, INVALID_NUMBER, LOGIN_DENIED, NO_DATA_FOUND, NOT_LOGGED_ON, PROGRAM_ERROR, ROWTYPE_MISMATCH, SELF_IS_NULL, STORAGE_ERROR, TOO_MANY_ROWS, VALUE_ERROR, ZERO_DIVIDE

Önceden hazırlanmış Exception türleri kullanılarak hataların bulunması, kayıt altına alınması gibi işlemler yapılır.

User-defined

Oracle PL/SQL ayrıca özel exception tanımlamaya imkan verir.

Bu Exception türlerine User-defined denir.

Özel bir Exception tanımlama aşağıdaki gibidir.

DECLARE
    OZEL_HATA EXCEPTION;
BEGIN
    NULL;
END;

Exception için özel bir hata kodu belirleme aşağıdaki gibidir.

DECLARE
    OZEL_HATA EXCEPTION;
    PRAGMA EXCEPTION_INIT (OZEL_HATA, -1453);
BEGIN
    NULL;
END;

Oluşturulan hata RAISE ile tetiklenerek Exception alanında işlem yapılır.

SET SERVEROUTPUT ON;
DECLARE
    OZEL_HATA EXCEPTION;
    PRAGMA EXCEPTION_INIT (OZEL_HATA, -1453);
    v_sayi PLS_INTEGER := '0';
BEGIN
    IF v_sayi = 0 THEN
        RAISE OZEL_HATA;
        -- RAISE_APPLICATION_ERROR(-1453, 'Başka bir hata.');
    END IF;
EXCEPTION
    WHEN OZEL_HATA THEN
        DBMS_OUTPUT.put_line('Özel bir hata meydana geldi.');
        DBMS_OUTPUT.put_line(SQLERRM);
    WHEN OTHERS THEN
        DBMS_OUTPUT.put_line('Bilinmeyen bir hata meydana geldi.');
END;

RAISE_APPLICATION_ERROR fonksiyonu özel bir hata oluşturmak için hata kodu, hata mesajı ve hatanın mevcut hatalarla değiştirilip değiştirilmeyeceğini parametre olarak alır.

PL/SQL Derslerine buradan ulaşabilirsiniz.

Hayırlı günler dilerim.

Yusuf SEZER

Yusuf SEZER

Computer Engineer who interested about web technologies, algorithms, artificial intelligence and embedded systems; constantly exploring new technologies.


Bunlara'da bakmalısın!