注意,為了能在終端看見put_line的輸出,還需要先開啟
set serveroutput on
?
--用來測試的表create table test_tri(
a1 int,
a2 int
)
tablespace test
-----行級insert觸發器-----
1) 插入的一行新數據保存在:new
2) insert觸發器沒有:old值3) 對:new的修改,只能定義在before類型的觸發器中---觸發器語法---create or replace trigger 名稱
[after|before] [delete|update|insert]
[of 列名] [on 表名]
[referencing new as 新行別名 old as 舊行別名]
[for each row] [when(條件)]
declare
....
begin
...
exception
....
end; --定義create or replace trigger test_before_insert
before insert on test_tri
for each row
when(new.a2 is null)begin
?? ?dbms_output.put_line('insert row original: a1=' || :new.a1 || ' a2=' || :new.a2);
?? ?:new.a2 := :new.a1 * 2;? ?
end;
/
create or replace trigger test_after_insert
after insert on test_tri
for each row
begin
?? ?dbms_output.put_line('insert row actual: a1=' || :new.a1 || ' a2=' || :new.a2);? ?
end;
/
--測試SQL> insert into test_tri(a1) values(1);
insert row original: a1=1
a2=insert row actual: a1=1 a2=2
SQL> insert into test_tri values(2,3);
insert row actual: a1=2 a2=3
SQL> select * from test_tri;
??????? A1???????? A2
---------- ----------
???????? 1?????????
2(由觸發器生成的值)???????? 2????????? 3
-----DDL觸發器-----
--任何create語句都會觸發這個語句create or replace trigger test_ddl_trigger
before create on schema
begin
??? dbms_output.put_line( 'DDL Trigger' );
??? insert into test_tri values(9,9);
end;
posted on 2010-01-11 14:58
Jcat 閱讀(259)
評論(0) 編輯 收藏 所屬分類:
Database