sql >> Databáze >  >> RDS >> Oracle

DBMS_SCHEDULER.DROP_JOB, pouze pokud existuje

Existují dva hlavní vzory, které můžete použít pro zpracování výjimek; „dívej se, než skočíš“ (LBYL) a „je jednodušší požádat o odpuštění než o svolení“ (EAFP). Společnost LBYL doporučuje před pokusem o její zrušení zkontrolovat, zda úloha existuje. EAFP by zahrnovala pokus o zrušení úlohy a následné zachycení a ignorování této konkrétní chyby, pokud k ní dojde.

Pokud byste použili LBYL, můžete se zeptat na systémové zobrazení USER_SCHEDULER_JOBS abyste zjistili, zda vaše práce existuje. Pokud ano, zahoďte to.

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;

U EAFP je to trochu jinak; definujte svou vlastní výjimku pojmenování interně definované výjimky a vytvoření instance s kódem chyby, který chcete zachytit. Pokud se tato chyba objeví, nedělejte nic.

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;

U této druhé metody stojí za zmínku dvě věci.

  1. Jsem pouze zachycení chyby způsobené touto konkrétní výjimkou. Totéž by bylo možné dosáhnout pomocí EXCEPTION WHEN OTHERS ale vřele doporučuji proti dělat tohle.

    Pokud řešíte výjimku, měli byste přesně vědět, co s ní uděláte. Je nepravděpodobné, že budete schopni správně zpracovat každou jednotlivou výjimku Oracle pomocí OTHERS a pokud tak učiníte, pravděpodobně byste je měli zaznamenat někam, kde si jich všimnou. Cituji z Pokynů pro předcházení a zacházení s výjimkami společnosti Oracle :

  2. šíření výjimek společnosti Oracle pracuje z interního bloku na externí blok, takže původní příčina chyby bude první výjimkou.




  1. Může pokojová knihovna zkopírovat db ze složky aktiv?

  2. Převod H2 dat do PostgreSQL

  3. Recenze knihy :Benjamin Nevarez:Query Tuning &Optimization

  4. Použití čistých TNSNAMES namísto hostitelských databázových připojení v Oracle JDeveloper