Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Tworzenie wyzwalacza, który zgłasza wyjątek przy wstawianiu

Czy chcesz zgłosić wyjątek (który uniemożliwiłby pomyślne wstawienie)? A może chcesz pozwolić na pomyślne wstawienie i zapisanie ciągu do dbms_output bufor, który może, ale nie musi istnieć i może być pokazywany człowiekowi uruchamiającemu wstawkę?

W obu przypadkach chcesz, aby był to wyzwalacz na poziomie wiersza, a nie na poziomie instrukcji, więc musisz dodać for each row klauzula.

CREATE OR REPLACE TRIGGER person_id_trigg
  AFTER INSERT
  ON person
  FOR EACH ROW

Jeśli chcesz zgłosić wyjątek

BEGIN
  IF( length( :new.id ) <> 11 )
  THEN
    RAISE_APPLICATION_ERROR( -20001, 
                             'The new ID value must have a length of 11' );
  END IF;
END;

Jeśli chcesz potencjalnie wydrukować dane wyjściowe, ale zezwól na insert odnieść sukces

BEGIN
  IF( length( :new.id ) <> 11 )
  THEN
    dbms_output.put_line( 'The new ID value must have a length of 11' );
  END IF;
END;

Oczywiście w rzeczywistości nigdy nie użyłbyś spustu do tego rodzaju rzeczy. W prawdziwym świecie użyłbyś ograniczenia.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wyodrębnić tylko czas z pola DateTime w Oracle SQL Developer?

  2. WYROCZNIA. Uwierzytelnianie z LDAP zawsze zwraca -16

  3. Konwertuj zapytanie Oracle SQL na zapytanie Azure SQL

  4. Jak wybrać i dołączyć do zapytania z tabelą

  5. Suma Suma częściowa w widoku siatki