Oracle触发器

触发器

满足特定事件时系统自动执行的命名块。主要用于实现一些比较复杂的完整性需求。

分类

DML触发器,DDL触发器,替代触发器,从数据库事件触发器。 DML触发器:在表上执行DML操作时自动触发。 创建DML触发器。

  1. 考虑四个方面:时间(before,after)、事件(insert,update,delete)、对象(表)、级别(语句级和行级)

  2. 三个谓词:inserting,updating,deleting。可以用于判断正在执行那个DML操作。

  3. 两个属性(行级触发器)::old,:new. :old.属性名。作用是获得某个属性更新前后的值。当其出现在when条件中时,省略冒号。

    1. insert::new

    2. update::old,:new

    3. delete::old

  4. (4)在DML触发器内部,不能之间或者间接使用事务处理语句(commit,rollback)

创建语法

create trigger create or replace trgger trigger_name before|after insert or update [of 列名,,] or delete on tablename [for each row] [when 条件] declare begin end;

例如

update emp set deptno=11 where deptno=20; --执行不成功

执行不成功的原因:外建的存在

解决办法:写一个触发器实现级联更新

create or replace trigger tri after update or delete on dept for each row -- 行级(若去掉则此触发器就成为了语句级触发器) begin  if updating then   update emp set deptno=:new.deptno where deptno=:old.deptno;  elsif deleting then   delete from emp where deptno=:old.deptno;  end if; end; /

创建一个行级触发器,记录对职务为CLERK的雇员工资的修改,且当修改幅度超过200时才进行记录,用 when条件限定触发器。

-- 日志表 create table log1 (id int primary key, name varchar2(20), dete1 date, even varchar2(20)); -- 序列 create sequence seq1; -- 创建触发器 create or replace trigger tri2 after update on emp for each row when (old.job='CLERK' and abs(new.sal-old.sal)>200) begin  insert into log1 values(seq1.nextval,user,sysdate,'update'); end; / -- update emp set sal=sal+199 where job='CLERK';select * from log1;update emp set sal=sal+201 where job='CLERK';select * from log1;

创建触发器,进行dept表的同步复制

create table dept_bak as select * from dept;create or replace trigger tri3 after insert or delete or update on dept for each row begin  if inserting then   insert into dept_bak values(:new.deptno,:new.dname,:new.loc);  elsif updating then   update dept_bak set deptno=:new.deptno,dname=:new.dname,loc=:new.loc where deptno=:old.deptno;  elsif deleting then   delete from dept where deptno=:old.deptno;  end if; end; /

相关推荐

  1. Oracle触发器

    2024-02-19 17:06:02       27 阅读
  2. oracle 触发器事前触发和事后触发区别

    2024-02-19 17:06:02       33 阅读
  3. Oracle】PL/SQL语法、存储过程,触发器

    2024-02-19 17:06:02       39 阅读
  4. 触发器

    2024-02-19 17:06:02       18 阅读
  5. oracle 触发器 怎么返回处理错误到客户端

    2024-02-19 17:06:02       38 阅读
  6. Mysql 触发器

    2024-02-19 17:06:02       32 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-19 17:06:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-19 17:06:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-19 17:06:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-19 17:06:02       18 阅读

热门阅读

  1. 索引失效的 12 种情况

    2024-02-19 17:06:02       29 阅读
  2. C++/Python/MATLAB检查内存使用情况

    2024-02-19 17:06:02       34 阅读
  3. Python爬虫开发:Scrapy框架与Requests库

    2024-02-19 17:06:02       29 阅读
  4. 力扣_字符串10—重复的DNA序列

    2024-02-19 17:06:02       25 阅读
  5. 《数学建模》专栏导读

    2024-02-19 17:06:02       36 阅读
  6. Pytorch-SGD算法解析

    2024-02-19 17:06:02       35 阅读
  7. Python如何用双重循环输出金字塔?

    2024-02-19 17:06:02       30 阅读