一、Oracle 觸發器
Oracle產生數據庫觸發器的語法為:
create [or replace] trigger 觸發器名 觸發時間 觸發事件
on 表名
[for each row]
pl/sql 語句
觸發器名:觸發器對象的名稱。沒有實質的用途。
觸發時間:指明觸發器何時執行,該值可取:
before---表示在數據庫動作之前觸發器執行;
after---表示在數據庫動作之後出發器執行。
觸發事件:指明哪些數據庫動作會觸發此觸發器:insert;update;delete:
表 名:數據庫觸發器所在的表。
for each row:對表的每一行觸發器執行一次。如果沒有這一選項,則只對整個表執行一次。
例:下面的觸發器在更新table之前觸發,目的是不允許在周末修改表:
create trigger Oracle_trigger
before insert or update or delete //對整表更新前觸發
on Oracle
begin
if(to_char(sysdate,'DY')='SUN'||to_char(sysdate,'DY')='SAN')
RAISE_APPLICATION_ERROR(-20600,'不能在周末修改Oracle');
end if;
end
二、Sybase數據庫觸發器
Sybase產生觸發器的語法為:
CREATE TRIGGER 觸發器名
ON 表名
FOR INSERT,UPDATE,DELETE
AS
SQL_statement |
FOR INSERT,UPDATE
AS
IF UPDATE(column_name) [AND|OR UPDATE(column_name)]...
SQL_statements
FOR子句用來指定在觸發器上的哪些數據庫的操作可該運行觸發器。IF UPDATE子句檢查對指定列的操作類型,在IF UPDATE子句
中可指定多個列。觸發器在數據更新語句完成以後立即執行。觸發器和啟動它的語句被當作一個事務處理,事務可以在觸發器中回退。
例:
create trigger Sybase_trigger
on Sybase
for insert
as
if(select count(*) from sybase_table,inserted where Sybase.per_code=insert.per_code)!=@@rowcount
begin
rollback transaction
print "sybase 表中 per_code 列的值不在Sybase_table 表中"
end
-