oracle 触发器用法,oracle 触发器的使用

触发器的格式

create or replace trigger   触发器的名字

before [after]    insert[update,delete]

on  作用于哪张表

[for each row]     如果是语句级触发器就不用写,行级触发器要写

declare

begin

end;

--触发器的使用场景一 复杂的安全检查

--案例一 禁止在非工作时间添加员工数据

create or replace trigger securityemp

before insert

on emp

declare

begin

if to_char(sysdate,‘day‘)in(‘星期六‘,‘星期日‘) or

to_number(to_char(sysdate,‘hh24‘)) not between 9 and 18 then

raise_application_error(-20001,‘禁止在非工作时间插入新员工‘);

end if;

end;

--测试

insert into emp(ename) values (‘你好‘);

--触发器的使用场景二 数据的确认

--场景 涨后的工作不能少于涨前的工资

create or replace trigger cheaksalary

before update

on emp

for each row

declare

begin

if :new.sal < :old.sal then

raise_application_error(-20002,‘涨后的薪水不能少于涨前的薪水,涨前薪水:‘||:old.sal||‘涨后的薪水:‘||:new.sal);

end if;

end;

--测试

update emp set sal=sal-11 where empno=7788;

--触发器的使用场景三 数据库的审计 基于值的审计

--场景 审计涨后工资超过5000的员工

create table audit_info( --建立一个新的表 用于检验工资超过5000的员工

information varchar2(200)

);

create or replace trigger do_autit_emp_salary

after update

on emp

for each row

declare

begin

if :new.sal>6000 then

insert into audit_info values (:new.deptno||‘ ‘||:new.ename||‘ ‘||:new.sal);

end if;

end;

--检测

update emp set sal=sal+2000;

select *from emp;

select * from audit_info;

--触发器的使用场景四 数据库的备份和同步

--场景 emp1中工资修改后 同步到copy_emp1中

create or replace trigger copy_emp1

after update

on emp1

for each row

declare

begin

update emp_back set sal=:new.sal where empno=:new.empno;

end;

--检测

update emp1 set sal=sal+100 where empno=7788;

select * from emp1 where empno=7788;

select * from emp_back where empno=7788;

oracle 触发器的使用

标签:sda   replace   ora   table   for   工作   int   rom   var

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉 本文系统来源:http://www.cnblogs.com/yin-dt/p/6752585.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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 数据库中非常有用的功能,可用于实现各种业务逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值