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

Pl/SQL Penanganan Pengecualian Prosedur Bersarang

Untuk menunjukkan penjelasan yang tepat tentang "apa yang terjadi dengan server" untuk level aplikasi, Anda dapat mencoba mengikuti. Dalam prosedur:

create or replace procedure p1 is
...
exception
  when <some_error> then
    <do something>
    -- re-raise error:
    raise_application_error(-20001, 'Client with ID '|| ID || ' has no right to perform action "' || ACTION_NAME || '"', true);
end;

create or replace procedure p2 is
begin
  p1;
exception
  when <another_error> then
    <do something>
    -- re-raise error:
    raise_application_error(-20002, 'Action "' || ACTION_NAME || '" is not completed', true);
end;

create or replace procedure p3 is
begin
  p2;
exception
  when <another_error> then
    <do something>
    -- re-raise error:
    raise_application_error(-20003, 'Purchasing of "' || CAR_NAME || '" cancelled', true);
end;

Dan dalam prosedur tingkat atas:

create or replace procedure top_level_procedure is
begin
  p1;
exception
  when <one_more_error> then
    <do something>
    raise_application_error(-20004, dbms_utility.format_error_backtrace);
end;

Setelah pengecualian di p1 Anda akan melihat sesuatu seperti ini:

ORA-20003: Purchasing of "Cool red Ferrari" cancelled
ORA-20002: Action "car purchase" is not completed
ORA-20001: Client with ID 123 has no right to perform action "Spent all money of Bill Gates"

Parameter ketiga dari prosedur raise_application_error dengan false nilai memotong semua pesan kesalahan sebelumnya. Jika Anda akan menggunakan nilai palsu dalam prosedur p3 , Anda hanya akan melihat satu pesan kesalahan dengan kode ORA-20003 dalam contoh ini.

P. S. Anda juga dapat menentukan pengecualian Anda sendiri dan menggunakannya di WHEN .. THEN ayat. Di sini Anda menemukan lebih banyak informasi dan contoh:https:// /docs.Oracle.com/cd/B28359_01/appdev.111/b28370/errors.htm#LNPLS00704

P. P. S. Cara masuk. Prosedur log:

create or replace procedure log(p_log_message varchar2) is
pragma autonomous_transaction;
begin
  insert into log_table(..., log_message) values (..., p_log_message);
  commit;
end;

Prosedur log panggilan:

  when <one_more_error> then
    <do something>
    log(..., dbms_utility.format_error_backtrace);
    raise_application_error(-20004, dbms_utility.format_error_backtrace);



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Titik koma hilang setelah mengekstrak DDL melalui skrip ksh

  2. Variabel ikat yang digunakan di BEGIN/END dihapus

  3. Memulai Pengembang Oracle SQL di MacOSX

  4. Cara memasukkan tanggal dalam database relasional Oracle menggunakan C #

  5. Indeks pada tampilan (Oracle)