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

DBMS_SCHEDULER.DROP_JOB hanya jika ada

Ada dua pola utama yang dapat Anda terapkan pada penanganan pengecualian; "lihat sebelum Anda melompat" (LBYL) dan "lebih mudah meminta maaf daripada izin" (EAFP). LBYL akan menganjurkan pemeriksaan untuk melihat apakah pekerjaan itu ada sebelum mencoba untuk menghentikannya. EAFP akan melibatkan upaya untuk menghentikan pekerjaan dan kemudian menangkap dan mengabaikan kesalahan tertentu, jika itu terjadi.

Jika Anda menerapkan LBYL, Anda dapat menanyakan tampilan sistem USER_SCHEDULER_JOBS untuk melihat apakah pekerjaan Anda ada. Jika ya, jatuhkan.

declare
   l_job_exists number;
begin
   select count(*) into l_job_exists
     from user_scheduler_jobs
    where job_name = 'STATISTICS_COLUMNS_JOB'
          ;

   if l_job_exists = 1 then
      dbms_scheduler.drop_job(job_name => 'STATISTICS_COLUMNS_JOB');
   end if;
end;

Untuk EAFP sedikit berbeda; menentukan pengecualian Anda sendiri oleh memberi nama pengecualian yang ditentukan secara internal dan membuat instance dengan kode kesalahan yang ingin Anda tangkap. Jika kesalahan itu kemudian dimunculkan, jangan lakukan apa pun.

declare
   job_doesnt_exist EXCEPTION;
   PRAGMA EXCEPTION_INIT( job_doesnt_exist, -27475 );
begin
   dbms_scheduler.drop_job(job_name => 'STATISTICS_COLUMNS_JOB');
exception when job_doesnt_exist then
   null;
end;

Ada dua hal yang perlu diperhatikan tentang metode kedua ini.

  1. Saya hanya menangkap kesalahan yang ditimbulkan oleh pengecualian khusus ini. Hal yang sama dapat dicapai dengan menggunakan EXCEPTION WHEN OTHERS tapi saya sangat merekomendasikan melawan melakukan ini.

    Jika Anda menangani pengecualian, Anda harus tahu persis apa yang akan Anda lakukan dengannya. Sepertinya Anda tidak memiliki kemampuan untuk menangani setiap pengecualian Oracle dengan benar menggunakan OTHERS dan jika Anda melakukannya, Anda mungkin harus mencatatnya di suatu tempat di mana mereka akan diperhatikan. Mengutip dari Oracle Pedoman untuk Menghindari dan Menangani Pengecualian :

  2. propagasi pengecualian Oracle bekerja dari blok internal ke blok eksternal sehingga penyebab awal kesalahan akan menjadi pengecualian pertama.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL Menggabungkan Beberapa Baris Dengan ID Yang Sama Tetapi Pengidentifikasi Rusak

  2. Oracle mengekspor SQL dari struktur Database

  3. Pemformatan string menggunakan LISTAGG di Oracle. Melarikan diri dari kutipan tunggal ` `

  4. Fitur Baru Oracle 18c:Modifikasi Partisi Online

  5. Instal klien Oracle Instan ke dalam wadah Docker untuk Python cx_Oracle