Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Penanganan pengecualian PL/SQL:tidak melakukan apa pun (abaikan pengecualian)

Meskipun saya setuju bahwa 99% dari waktu adalah praktik yang buruk untuk mengabaikan pengecualian secara diam-diam tanpa setidaknya mencatatnya di suatu tempat, ada situasi tertentu di mana ini dapat diterima dengan baik.

Dalam situasi ini, NULL adalah teman Anda:

[...]
EXCEPTION

    WHEN OTHERS THEN
        NULL;
END;

Dua situasi khas di mana mengabaikan pengecualian mungkin diinginkan adalah:

1) Kode Anda berisi pernyataan yang Anda tahu kadang-kadang akan gagal dan Anda tidak ingin fakta ini mengganggu alur program Anda. Dalam hal ini, Anda harus menyertakan pernyataan Anda dalam blok bersarang, seperti yang ditunjukkan oleh contoh berikut:

CREATE OR REPLACE PROCEDURE MY_PROCEDURE() 
IS
    l_empoyee_name  EMPLOYEES.EMPLOYEE_NAME%TYPE;
BEGIN
    -- Catch potential NO_DATA_FOUND exception and continue
    BEGIN 
        SELECT EMPLOYEE_NAME
        INTO l_empoyee_name
        FROM EMPLOYEES
        WHERE EMPLOYEE_ID = 12345;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            NULL;
        WHEN OTHERS THEN
            RAISE;
    END;

    do_stuff();

EXCEPTION

    WHEN OTHERS THEN
        -- Propagate exception
        RAISE;
END;

Perhatikan bahwa PL/SQL umumnya tidak mengizinkan jenis penanganan eksepsi On Error Resume Next yang diketahui dari Visual Basic, di mana semua eksepsi diabaikan dan program terus berjalan seolah-olah tidak terjadi apa-apa (lihat Pada kesalahan lanjutkan jenis penanganan kesalahan berikutnya di PL /SQL Oracle ). Anda harus secara eksplisit menyertakan pernyataan yang berpotensi gagal dalam blok bersarang.

2) Prosedur Anda sangat tidak penting sehingga mengabaikan semua pengecualian yang dilemparkan tidak akan memengaruhi logika program utama Anda. (Namun, ini sangat jarang terjadi dan seringkali dapat mengakibatkan mimpi buruk debug dalam jangka panjang)

BEGIN

    do_stuff();

EXCEPTION

    WHEN OTHERS THEN
        -- Ignore all exceptions and return control to calling block
        NULL;
END;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MAX() di ORACLE SQL

  2. di mana permintaan rownum=1 membutuhkan waktu di Oracle

  3. Bagaimana saya bisa mendapatkan jumlah catatan yang terpengaruh oleh prosedur tersimpan?

  4. Apakah kinerja akan berdampak ketika prosedur database dipanggil dari aplikasi berkali-kali?

  5. Daftar Parameter NLS di Oracle Database