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

Jak vyvolat výjimku uvnitř spouštěče? Existuje způsob, jak to udělat?

Už jste skoro tam; pokud chcete něco deklarovat, potřebujete blok DECLARE ve spouštěči; to znamená, že vaše klauzule WHEN je na nesprávném místě.

create or replace trigger trig1
 before update
 of sal
 on emp
 for each row
 when (new.sal < old.sal)

declare    
   user_xcep EXCEPTION;
   PRAGMA EXCEPTION_INIT( user_xcep, -20001 );
begin
   raise user_xcep;
end;

SQL Fiddle

Několik bodů:

  1. Nikdy zachytit výjimku a poté zavolat DBMS_OUTPUT.PUT_LINE; je to zbytečné. Někdo tam musí být, aby viděl výsledek každého záznamu. Pokud nechcete, aby se něco stalo, aktivujte výjimku a pak ji chyťte. Do vaší výjimky jsem přidal kód chyby, abyste to mohli zachytit mimo spouštěč a zpracovat to, jak chcete (netisknout nic do stdout).
  2. Je to menší bod, ale přidal jsem trochu mezer; nic moc. Původně jsem nemohl zjistit, kde je problém s vaším kódem, protože jste žádný neměli.
  3. Po deklaraci výjimky a RAISE vám chyběly středníky.

Přečtěte si více o interně definovaných výjimkách v dokumentaci




  1. Vytvoření databáze v cloudových webech

  2. Používá Oracle vyhodnocování zkratů?

  3. SQLiteDiskIOException s kódem chyby 10:chyba vstupu/výstupu disku

  4. Export databáze SQLite do souboru XML