oracle觸發器使用例項

2021-10-01 19:48:25 字數 1611 閱讀 5452

在使用觸發器前先理解兩個概念:new和:old, :new代表執行更新操作之後的新錶,:old代表執行更新操作之前的舊表。通過這兩張表的使用,可以訪問到觸發器執行前後表資料的變化。

insert操作只有:new,delete操作只有:old,update操作二者皆有。

:new 和 :old只用於行級觸發器。

–:new表,將插入的資料先放入到:new表中,確認後放到要更新的表。

–:old表,將不要的資料先放入到:old表中,確認不要了再清除:old表。

–注意::new表和:old表中至始至終就只有一條資料,而列的話,觸發器的表有多少個列,:new表和:old表就有多少個列。

create or replace trigger user

after delete or insert or update

on sys_members --在sys_members表中

for each row --行級模式(遮蔽該條語句為語句級觸發器)

begin

case

when deleting then --刪除時

if :old.login_user='c01' then --如果:old表中存在c01,就提示不能刪

dbms_output.put_line('該使用者不能刪');

end if;

when updating then --修改時

if :old.login_user='c01' then --如果:old表中存在c01,就提示不能修改

end if;

when inserting then --插入時

if :new.login_user='c01' then --如果:new表中存在c01,就提示不能插入

dbms_output.put_line('c01使用者已經存在');

elsif :new.login_user='a01' then --如果:new表中存在a01,就提示不能插入

dbms_output.put_line('a01使用者已經存在');

elsif :new.login_user='a1001' then --如果:new表中存在a1001,就提示不能插入

dbms_output.put_line('a1001使用者已經存在');

else

dbms_output.put_line('新增成功!!!');

end if;

end case;

end;

下面是測試**

update sys_members  set register_time = '2019-11-28 22:40:40' where login_user = 'c01';
insert into sys_members  values (10086,'c01','123','123',1,'2019-12-25 10:30:00','a1001','0,a1001',0,'張三',0,'',2,1,'666','455','111',0,0);
delete from sys_members where login_user='c01';

oracle觸發器使用

size medium 語法規則 create or replace trigger 模式.觸發器名 before after insert delete update of 列名 on 表名 for each row when 條件 pl sql塊 說明 for each row的意義是 在一次操...

oracle觸發器使用案例

開發要求 刪除或者更新表tab的行時,更新表cust相應的字段。表tab中custguid欄位和表cust中cust guid欄位是關聯字段,表tab中com欄位和表cust中str欄位是關聯字段。建立表tab,表cust create table tab custguid varchar2 30 ...

Oracle的觸發器使用

在oracle中想要插入資料或更新資料時能夠自動更新時間,需要使用使用觸發器,此處使用的工具時plsql 1.建表 create table rm catalog id varchar 64 primary key,name varchar 256 fatherid varchar 64 crate...