oracle触发器使用实例

在使用触发器前先理解两个概念: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('该用户不能删');

raise_application_error(-20010,'该用户不能删!!!');

end if;

when updating then  --修改时

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

raise_application_error(-20011,'该用户不能修改!!!');

end if;

when inserting then  --插入时

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

  dbms_output.put_line('C01用户已经存在');

  raise_application_error(-20012,'C01用户不能添加!!!');
  
elsif :new.LOGIN_USER='a01' then --如果:new表中存在a01,就提示不能插入

  dbms_output.put_line('a01用户已经存在');

  raise_application_error(-20012,'a01用户不能添加!!!');
  
elsif :new.LOGIN_USER='a1001' then --如果:new表中存在a1001,就提示不能插入

  dbms_output.put_line('a1001用户已经存在');

  raise_application_error(-20012,'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';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Oracle 触发器是一种特殊的存储过程,它会在指定的数据库操作(如 INSERT、UPDATE、DELETE)发生时自动执行。Oracle 触发器的主要作用是在数据库操作之前或之后执行一些业务逻辑。下面是 Oracle 触发器的用法和实例详解。 1. 创建触发器 Oracle 触发器的语法如下: ```sql CREATE [OR REPLACE] TRIGGER trigger_name {BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON table_name [FOR EACH ROW] [WHEN condition] DECLARE -- 声明变量 BEGIN -- 触发器的业务逻辑 END; ``` 其中,`trigger_name` 是触发器的名称,`table_name` 是要监视的表名,`INSERT`、`UPDATE`、`DELETE` 是监视的操作类型,`BEFORE` 和 `AFTER` 是触发器执行的时间点,`FOR EACH ROW` 意味着每行数据都会触发触发器,`WHEN condition` 是触发器执行的条件,`DECLARE` 是可选的,用于声明变量,`BEGIN` 和 `END` 之间是触发器的业务逻辑。 2. 触发器实例 以下是一个在 `employees` 表中插入数据时自动计算并更新 `salary` 列的触发器: ```sql CREATE OR REPLACE TRIGGER trg_update_salary AFTER INSERT ON employees FOR EACH ROW BEGIN UPDATE employees SET salary = salary + :new.salary * 0.1 WHERE employee_id = :new.employee_id; END; ``` 该触发器在 `employees` 表中插入数据之后自动执行,对插入的新行的 `salary` 列进行更新。 3. 触发器的应用场景 Oracle 触发器的应用场景非常广泛,例如: - 数据完整性约束:在数据插入、更新或删除之前或之后验证数据的完整性。 - 数据库日志:在数据插入、更新或删除之前或之后记录数据库的操作日志。 - 数据库备份:在数据插入、更新或删除之后自动备份数据库。 - 数据库监控:在数据插入、更新或删除之前或之后自动监控数据库。 - 数据库性能优化:在数据插入、更新或删除之后自动重新计算数据库的统计信息,以提高查询性能。 总之,Oracle 触发器Oracle 数据库中非常有用的功能,可用于实现各种业务逻辑。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值