CREATE TABLE TRIGG_COMPOUND_EXMP_TABLE (
id NUMBER,
description VARCHAR2(50)
);
CREATE OR REPLACE TRIGGER TRIGG_COMPOUND_EXMP
FOR INSERT OR UPDATE OR DELETE ON TRIGG_COMPOUND_EXMP_TABLE
COMPOUND TRIGGER
-- Global declaration.
TYPE COLL_T IS TABLE OF VARCHAR2(50);
OBJ_T COLL_T := COLL_T();
BEFORE STATEMENT IS
BEGIN
OBJ_T.extend;
CASE
WHEN INSERTING THEN
OBJ_T(OBJ_T.last) := 'BEFORE STATEMENT - INSERT';
WHEN UPDATING THEN
OBJ_T(OBJ_T.last) := 'BEFORE STATEMENT - UPDATE';
WHEN DELETING THEN
OBJ_T(OBJ_T.last) := 'BEFORE STATEMENT - DELETE';
END CASE;
END BEFORE STATEMENT;
BEFORE EACH ROW IS
BEGIN
OBJ_T.extend;
CASE
WHEN INSERTING THEN
OBJ_T(OBJ_T.last) := 'BEFORE EACH ROW - INSERT (new.id=' || :new.id || ')';
WHEN UPDATING THEN
OBJ_T(OBJ_T.last) := 'BEFORE EACH ROW - UPDATE (new.id=' || :new.id || ' old.id=' || :old.id || ')';
WHEN DELETING THEN
OBJ_T(OBJ_T.last) := 'BEFORE EACH ROW - DELETE (old.id=' || :old.id || ')';
END CASE;
END BEFORE EACH ROW;
AFTER EACH ROW IS
BEGIN
OBJ_T.extend;
CASE
WHEN INSERTING THEN
OBJ_T(OBJ_T.last) := 'AFTER EACH ROW - INSERT (new.id=' || :new.id || ')';
WHEN UPDATING THEN
OBJ_T(OBJ_T.last) := 'AFTER EACH ROW - UPDATE (new.id=' || :new.id || ' old.id=' || :old.id || ')';
WHEN DELETING THEN
OBJ_T(OBJ_T.last) := 'AFTER EACH ROW - DELETE (old.id=' || :old.id || ')';
END CASE;
END AFTER EACH ROW;
AFTER STATEMENT IS
BEGIN
OBJ_T.extend;
CASE
WHEN INSERTING THEN
OBJ_T(OBJ_T.last) := 'AFTER STATEMENT - INSERT';
WHEN UPDATING THEN
OBJ_T(OBJ_T.last) := 'AFTER STATEMENT - UPDATE';
WHEN DELETING THEN
OBJ_T(OBJ_T.last) := 'AFTER STATEMENT - DELETE';
END CASE;
FOR i IN OBJ_T.first .. OBJ_T.last LOOP
DBMS_OUTPUT.put_line(OBJ_T(i));
END LOOP;
OBJ_T.delete;
END AFTER STATEMENT;
END TRIGG_COMPOUND_EXMP_trg;
/
id NUMBER,
description VARCHAR2(50)
);
CREATE OR REPLACE TRIGGER TRIGG_COMPOUND_EXMP
FOR INSERT OR UPDATE OR DELETE ON TRIGG_COMPOUND_EXMP_TABLE
COMPOUND TRIGGER
-- Global declaration.
TYPE COLL_T IS TABLE OF VARCHAR2(50);
OBJ_T COLL_T := COLL_T();
BEFORE STATEMENT IS
BEGIN
OBJ_T.extend;
CASE
WHEN INSERTING THEN
OBJ_T(OBJ_T.last) := 'BEFORE STATEMENT - INSERT';
WHEN UPDATING THEN
OBJ_T(OBJ_T.last) := 'BEFORE STATEMENT - UPDATE';
WHEN DELETING THEN
OBJ_T(OBJ_T.last) := 'BEFORE STATEMENT - DELETE';
END CASE;
END BEFORE STATEMENT;
BEFORE EACH ROW IS
BEGIN
OBJ_T.extend;
CASE
WHEN INSERTING THEN
OBJ_T(OBJ_T.last) := 'BEFORE EACH ROW - INSERT (new.id=' || :new.id || ')';
WHEN UPDATING THEN
OBJ_T(OBJ_T.last) := 'BEFORE EACH ROW - UPDATE (new.id=' || :new.id || ' old.id=' || :old.id || ')';
WHEN DELETING THEN
OBJ_T(OBJ_T.last) := 'BEFORE EACH ROW - DELETE (old.id=' || :old.id || ')';
END CASE;
END BEFORE EACH ROW;
AFTER EACH ROW IS
BEGIN
OBJ_T.extend;
CASE
WHEN INSERTING THEN
OBJ_T(OBJ_T.last) := 'AFTER EACH ROW - INSERT (new.id=' || :new.id || ')';
WHEN UPDATING THEN
OBJ_T(OBJ_T.last) := 'AFTER EACH ROW - UPDATE (new.id=' || :new.id || ' old.id=' || :old.id || ')';
WHEN DELETING THEN
OBJ_T(OBJ_T.last) := 'AFTER EACH ROW - DELETE (old.id=' || :old.id || ')';
END CASE;
END AFTER EACH ROW;
AFTER STATEMENT IS
BEGIN
OBJ_T.extend;
CASE
WHEN INSERTING THEN
OBJ_T(OBJ_T.last) := 'AFTER STATEMENT - INSERT';
WHEN UPDATING THEN
OBJ_T(OBJ_T.last) := 'AFTER STATEMENT - UPDATE';
WHEN DELETING THEN
OBJ_T(OBJ_T.last) := 'AFTER STATEMENT - DELETE';
END CASE;
FOR i IN OBJ_T.first .. OBJ_T.last LOOP
DBMS_OUTPUT.put_line(OBJ_T(i));
END LOOP;
OBJ_T.delete;
END AFTER STATEMENT;
END TRIGG_COMPOUND_EXMP_trg;
/
No comments:
Post a Comment