ORACLE產(chǎn)生數(shù)據(jù)庫(kù)觸發(fā)器的語(yǔ)法為:

 

    create [or replace] trigger 觸發(fā)器名 觸發(fā)時(shí)間 觸發(fā)事件

      on 表名

      [for each row]

      pl/sql 語(yǔ)句

    其中:

    觸發(fā)器名:觸發(fā)器對(duì)象的名稱(chēng)。由于觸發(fā)器是數(shù)據(jù)庫(kù)自動(dòng)執(zhí)行

              的,因此該名稱(chēng)只是一個(gè)名稱(chēng),沒(méi)有實(shí)質(zhì)的用途。

    觸發(fā)時(shí)間:指明觸發(fā)器何時(shí)執(zhí)行,該值可取:

              before---表示在數(shù)據(jù)庫(kù)動(dòng)作之前觸發(fā)器執(zhí)行;

              after---表示在數(shù)據(jù)庫(kù)動(dòng)作之后出發(fā)器執(zhí)行。

    觸發(fā)事件:指明哪些數(shù)據(jù)庫(kù)動(dòng)作會(huì)觸發(fā)此觸發(fā)器:

              insert:數(shù)據(jù)庫(kù)插入會(huì)觸發(fā)此觸發(fā)器;

              update:數(shù)據(jù)庫(kù)修改會(huì)觸發(fā)此觸發(fā)器;

              delete:數(shù)據(jù)庫(kù)刪除會(huì)觸發(fā)此觸發(fā)器。

    表    名:數(shù)據(jù)庫(kù)觸發(fā)器所在的表。

    for each row:對(duì)表的每一行觸發(fā)器執(zhí)行一次。如果沒(méi)有這一

                  選項(xiàng),則只對(duì)整個(gè)表執(zhí)行一次。

    舉例:下面的觸發(fā)器在更新表auths之前觸發(fā),目的是不允許在

          周末修改表:

    create trigger auth_secure

      before insert or update or delete  //對(duì)整表更新前觸發(fā)

      on auths

    begin

      if(to_char(sysdate,'DY')='SUN'

        RAISE_APPLICATION_ERROR(-20600,'不能在周末修改表auths');

      end if;

    end



----------------------------
create trigger biufer_employees_department_id

         before insert or update

                of department_id

                on employees

         referencing old as old_value

                         new as new_value

         for each row

         when (new_value.department_id<>80 )

  begin

         :new_value.commission_pct :=0;

  end;

  /