ORACLE Table Trigger ID

Sotto un esempio di come realizzata una tabella con associato un trigger sul campo chiave IDT, con un relativo TRIGGER che provvede con l’omonima SEQUENCE a valorizzare in automatico tale campo.

CREATE SEQUENCE TAB1_SRL
  START WITH 1
  MAXVALUE 999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 4
  NOORDER;

CREATE TABLE TAB1
(
  IDT           NUMBER(10)            NOT NULL,
  CAMPO1    CHAR(30 BYTE)                  NOT NULL,
  CAMPO2    NUMBER(10)                    NOT NULL,
  UTD           CHAR(16 BYTE),
  DTA           DATE
);


CREATE OR REPLACE TRIGGER TAB1_SRL
  before insert ON TAB1 for each row
declare
  n_new number(12) := 0;
  n_inc number(12) := 0;
begin
  if (:new.IDT=0) or (:new.IDT is null) then
     select TAB1_SRL.nextval into n_new from dual;
  else
     n_new := :new.IDT;
     n_inc := 1;
     loop
        exit when n_inc>=n_new;
        select TAB1_SRL.nextval into n_inc from dual;
     end loop;
  end if;
  :new.IDT := n_new;
end;
/
This entry was posted in Database, Oracle. Bookmark the permalink.