create sequence SEQUENCE_1
start with 1
increment by 1
cache 20
nominvalue
nomaxvalue
nocycle
noorder
Sequence created.
create table TEST_TRG
(
a1 NUMBER not null,
a2 VARCHAR2(100),
a3 TIMESTAMP(6),
a4 DATE
)
Table created.
insert into test_trg values(sequence_1.nextval,'Y',null,null)
1 row(s) inserted.
insert into test_trg values(sequence_1.nextval,'N',null,null)
1 row(s) inserted.
insert into test_trg values(sequence_1.nextval,'N',null,null)
1 row(s) inserted.
insert into test_trg values(sequence_1.nextval,'N',null,null)
1 row(s) inserted.
CREATE OR REPLACE TRIGGER TEST_COMPOUND
FOR DELETE OR INSERT OR UPDATE ON TEST_TRG
COMPOUND TRIGGER
v_x number;
v_y number;
--Executed before DML statement BEFORE STATEMENT IS
BEFORE STATEMENT IS
BEGIN
dbms_output.put_line(' ');
v_x := DBMS_RANDOM.random();
dbms_output.put_line('BEFORE STATEMENT. X:'||v_x);
END BEFORE STATEMENT;
--Executed before each row change- :NEW, :OLD are available
BEFORE EACH ROW IS
BEGIN
v_y := DBMS_RANDOM.random();
dbms_output.put('BEFORE EACH ROW. X:'||v_x);
dbms_output.put_line(' Y:'||v_y);
END BEFORE EACH ROW;
--Executed aftereach row change- :NEW, :OLD are available
AFTER EACH ROW IS
BEGIN
dbms_output.put('AFTER EACH ROW. X:'||v_x);
dbms_output.put_line(' Y:'||v_y);
dbms_output.put_line(' ');
NULL;
END AFTER EACH ROW;
--Executed after DML statement
AFTER STATEMENT IS
BEGIN
dbms_output.put('AFTER STATEMENT. X:'||v_x);
dbms_output.put_line(' Y:'||v_y);
dbms_output.put_line(' ');
END AFTER STATEMENT;
END;
Trigger created.
MERGE INTO test_trg e
USING (SELECT 3 as a1, 'Y' as a2
FROM dual
UNION ALL
SELECT 4, 'N'
FROM dual
UNION ALL
SELECT 6, 'N'
FROM dual
UNION ALL
SELECT 7, 'N'
FROM dual
UNION ALL
SELECT 8, 'N'
FROM dual) h
ON (e.a1 = h.a1)
WHEN MATCHED THEN
UPDATE SET e.a2 = h.a2
WHEN NOT MATCHED THEN
INSERT
(a1, a2)
VALUES
(h.a1, h.a2)
BEFORE STATEMENT. X:1026657616
BEFORE STATEMENT. X:-1573756378
BEFORE EACH ROW. X:-1573756378 Y:1551155863
AFTER EACH ROW. X:-1573756378 Y:1551155863
BEFORE EACH ROW. X:-1573756378 Y:-36640373
AFTER EACH ROW. X:-1573756378 Y:-36640373
BEFORE EACH ROW. X: Y:-1297557227
BEFORE EACH ROW. X: Y:-17197619
BEFORE EACH ROW. X: Y:-453600426
AFTER EACH ROW. X: Y:-453600426
AFTER EACH ROW. X: Y:-453600426
AFTER EACH ROW. X: Y:-453600426
AFTER STATEMENT. X: Y:-453600426
AFTER STATEMENT. X:-1573756378 Y:-36640373
declare
TYPE tt is table of varchar2(1);
tb tt;
begin
tb := tt();
tb.extend(3);
tb(1) := 'N';
tb(2) := 'N';
tb(3) := 'N';
forall i in tb.first ..tb.last
insert into test_trg values(sequence_1.nextval,tb(i),null,null);
end;
BEFORE STATEMENT. X:680684390
BEFORE EACH ROW. X:680684390 Y:582182012
BEFORE EACH ROW. X:680684390 Y:-2076610854
BEFORE EACH ROW. X:680684390 Y:-9094893
AFTER EACH ROW. X:680684390 Y:-9094893
AFTER EACH ROW. X:680684390 Y:-9094893
AFTER EACH ROW. X:680684390 Y:-9094893
AFTER STATEMENT. X:680684390 Y:-9094893