User Tools

Site Tools


kurs:journal_trigger_mit_denormalisieren

This is an old revision of the document!


CREATE OR REPLACE 
TYPE ausbildung
 AS TABLE OF VARCHAR2(100)
/
CREATE TABLE kursteilnehmer_jn
    (id                             NUMBER,
    kursteilnehmer_id              NUMBER,
    name                           VARCHAR2(100 BYTE),
    punkte                         NUMBER,
    log_date                       DATE,
    dml                            VARCHAR2(1 BYTE))  
/
CREATE TABLE kursteilnehmer
    (id                             NUMBER ,
    name                           VARCHAR2(100 BYTE),
    ausbildung                     HR.AUSBILDUNG,
    create_date                    DATE,
    change_date                    DATE,
    punkte                         NUMBER)
   NESTED TABLE ausbildung STORE AS store_ausbildung  
/

-- Indexes for KURSTEILNEHMER

CREATE UNIQUE INDEX sys_c009774 ON kursteilnehmer
  (
    ausbildung                      ASC
  )
/

-- Constraints for KURSTEILNEHMER

ALTER TABLE kursteilnehmer
ADD CONSTRAINT kursteilnehmer_name_uk UNIQUE (name)
/

ALTER TABLE kursteilnehmer
ADD CONSTRAINT kursteilnehmer_id_pk PRIMARY KEY (id)
/


-- Triggers for KURSTEILNEHMER

CREATE OR REPLACE TRIGGER kursteilnehmer_insert_id_trg
 BEFORE
  INSERT
 ON kursteilnehmer
REFERENCING NEW AS NEW OLD AS OLD
 FOR EACH ROW
begin
  :new.id := s.nextval;
  :new.create_date := sysdate;
end;
/

CREATE OR REPLACE TRIGGER kursteilnehmer_change_date_trg
 BEFORE
  UPDATE
 ON kursteilnehmer
REFERENCING NEW AS NEW OLD AS OLD
 FOR EACH ROW
begin
  :new.change_date := sysdate;
end;
/

CREATE OR REPLACE TRIGGER kursteilnehmer_log_trg
 AFTER
  INSERT OR DELETE OR UPDATE
 ON kursteilnehmer
REFERENCING NEW AS NEW OLD AS OLD
declare
v_dml varchar2(1);
begin
  if inserting then
    v_dml := 'I';
  elsif updating then
    v_dml := 'U';
  else
    v_dml := 'D';
  end if;
  
  insert into log (logging)
    values
  (v_dml||' :kursteilnehmer');
  
end;
/

CREATE OR REPLACE TRIGGER kursteilnehmer_jn_trg
 AFTER
  INSERT OR DELETE OR UPDATE
 ON kursteilnehmer
REFERENCING NEW AS NEW OLD AS OLD
 FOR EACH ROW
declare
  v_dml varchar2(1);
begin

v_dml := (case when inserting then 'I'
               when updating  then 'U'
         else 'D'
         end);

insert into kursteilnehmer_jn (
    id,
    kursteilnehmer_id,
    name,
    punkte,
    log_date,
    dml
  ) values (
    s.nextval,
    coalesce(:new.id, :old.id),
    coalesce(:new.name, :old.name),
    coalesce(:new.punkte, :old.punkte),
    sysdate,
    v_dml
  );
 end;
/
CREATE TABLE kt_telefon
    (id                             NUMBER,
    kursteilnehmer_id              NUMBER,
    telnr                          VARCHAR2(30 BYTE))
/

ALTER TABLE kt_telefon
ADD CONSTRAINT kt_telefon_kt_id_fk FOREIGN KEY (kursteilnehmer_id)
REFERENCES kursteilnehmer (id) ON DELETE CASCADE
/
kurs/journal_trigger_mit_denormalisieren.1322727675.txt.gz · Last modified: 2014/09/10 21:22 (external edit)