先看例子(將表與序列關聯):
create or replace trigger TRG_student --定義觸發器名稱
before insert --定義觸發時間和觸發事件
on student --定義要操作的表
for each row --說明是行觸發器,無此行時說明是語句觸發器
begin --個人理解,應該是表示pl/sql語句塊的開始
select SEQ_student.nextval into :new.student_id from dual --注意new前的冒號!
end; --個人理解,應該是表示pl/sql語句塊的結束
例子二:
--個人理解,應該是表示pl/sql語句塊的開始
create trigger TRG_student
before insert or update
on student
for each row
when(new.gender='B') --注意此時new前沒加冒號!
begin --語句塊內的必須要加!
if(:new.score<60) then
:new.score:=61;
end if;
end;
REFERENCING 子句說明相關名稱,在行觸發器的PL/SQL塊和WHEN 子句中可以使用相關名稱參照當前的新、舊列值,默認的相關名稱分別爲OLD和NEW。觸發器的PL/SQL塊中應用相關名稱時,必須在它們之前加冒號(:),但在WHEN子句中則不能加冒號。
每個表中最多定義12種觸發器,知道是哪幾個嗎?