广告
返回顶部
首页 > 资讯 > 数据库 >Oracle 笔记(九)、触发器
  • 217
分享到

Oracle 笔记(九)、触发器

2024-04-02 19:04:59 217人浏览 独家记忆
摘要

1、触发器一旦创建就会立刻生效,有时可能需要临时禁用触发器,最常见的原因就是涉及数据加载。ALTER TRIGGER trigger_name [ENABLE | DISABLE];  

1、触发器一旦创建就会立刻生效,有时可能需要临时禁用触发器,最常见的原因就是涉及数据加载。
ALTER TRIGGER trigger_name [ENABLE | DISABLE];

    2、oracle 触发器里两个重要的内存逻辑表 :old 和 :new。:old 表保存的是在DML语句之前的数据,:new 表保存的是在DML语句创建的数据。
        old    new
INSERT    -    √
DELETE    √    -
UPDATE    √    √

    3、在触发器语句中不能显式的提交/回滚事务




一、行级触发器
行级触发器对 DML 语句影响的每个行执行一次。主要应用保持数据完整性。

例:两表级联更新,修改部门表编号的同时也修改员工表的部门编号:
CREATE OR REPLACE TRIGGER update_dept
 
  AFTER UPDATE ON deptment
  FOR EACH ROW
BEGIN
 
  UPDATE emp SET id=:new.id WHERE id=:old.id;
END;

UPDATE deptment SET id='yy' WHERE id='01';

SELECT * FROM deptment;
SELECT * FROM emp;


插入时利用触发器+序列实现整型字段的自增:
CREATE OR REPLACE TRIGGER set_no
  BEFORE INSERT ON auto
  FOR EACH ROW
DECLARE 
  sn number(5);
BEGIN
 
  SELECT myseq.nextval INTO sn FROM dual;
  :NEW.a := sn;
END;

INSERT INTO auto VALUES(21,'dtt');
SELECT * FROM auto;



二、语句级触发器
只与语句有关,与行无关,不涉及数据完整性问题。

例如:利用触发器记录,记录某表中用户的操作(日志处理)。
CREATE OR REPLACE TRIGGER dm1_aa
  AFTER INSERT OR DELETE OR UPDATE ON aa
BEGIN
  IF INSERTING THEN
    INSERT INTO mylog VALUES(user,sysdate,'I');
  ELSEIF DELETING THEN
    INSERT INTO mylog VALUES(user,sysdate,'D');
  ELSE
    INSERT INTO mylog VALUES(user,sysdate,'U');
  END IF;
END;

ps.能否记录多个表?"after insert or delete or update on t1,t2" 出错。



三、替换触发器
解决Oracle视图中多表更新的限制,只能在视图中使用,属于行级触发器。

例如:在视图中插入新的部门同时插入其所属的新员工:
CREATE OF REPLACE TRIGGER tr_v_e_d
 
  INSTEAD OF INSERT ON v_emp_dept
  FOR EACH ROW
BEGIN
 
  INSERT INTO deptment VALUES(:new.id, :new.name);
  INSERT INTO emp(eid, ename, sex, id) VALUES(:new.eid, :new.ename, :new.sex, :new.d);
END;

INSERT INTO v_emp_dept VALUES('456', 'test', 'f', '33', 'hg');
SELECT * FROM v_emp_dept;



四、模式级触发器
可以在模式对象的操作上建立的触发器,如 CREATE、ALTER、DROP、GRANT、REVOKE 和 TRUNCATE 等DDL语句。
[BEFORE | AFTER] trigger_event ON [schema.]SCHEMA

例如:对用户所删除的所有对象进行日志记录
CREATE OR REPLACE TRIGGER log_drop_obj
  AFTER DROP ON SCHEMA
BEGIN
 
  INSERT INTO dropped_obj VALUES(ORA_DICT_OBJ_NAME, ORA_DICT_TYPE, SYSDATE);
END;

CREATE TABLE for_drop(x char);
DROP TABLE for_drop;

SELECT * FROM dropped_obj;




五、数据库级触发器
可以创建在数据库事件上的触发器,包括启动、关闭、服务器错误、登录和注销等。这些事件都是实例范围内的,不与特定的表或视图关联。

CREATE OR REPLACE TRIGGER system_startup
  AFTER STARTUP ON DATABASE
BEGIN
  ...
END;


您可能感兴趣的文档:

--结束END--

本文标题: Oracle 笔记(九)、触发器

本文链接: https://www.lsjlt.com/news/35849.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Oracle 笔记(九)、触发器
    1、触发器一旦创建就会立刻生效,有时可能需要临时禁用触发器,最常见的原因就是涉及数据加载。ALTER TRIGGER trigger_name [ENABLE | DISABLE];  ...
    99+
    2022-10-18
  • SqlServer系列笔记——触发器
    触发器是一种特殊类型的存储过程,它不同于前面介绍过的一般的存储过程。一般的存储过程通过存储过程名称被直接调用,而触发器主要是通过事件进行触发而被执行。触发器是一个功能强大的工具,在表中数据发生变化时自动强制...
    99+
    2022-10-18
  • MySQL学习笔记(12):触发器
    本文更新于2019-06-23,使用MySQL 5.7,操作系统为Deepin 15.4。 目录SQL语句示例 SQL语句 为了便于描述,此处将创建触发器的DDL复述一次,其已于“SQL”章节描述。 CREATE TRIGGER ...
    99+
    2021-06-20
    MySQL学习笔记(12):触发器
  • SqlServer系列笔记——触发器2
    一、创建一个简单的触发器触发器是一种特殊的存储过程,类似于事件函数,SQL Server 允许为 INSERT、UPDATE、DELETE 创建触发器,即当在表中插入、更新、删除记录时,触发一个或一...
    99+
    2022-10-18
  • Redis学习笔记(十九) 发布订阅(上)
    Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息,它的发布与订阅功能由PUBLISH、SUBSCRIBE、PSUBSCRIBE等命令组成。 通过执行SUBSCRIBE命令...
    99+
    2016-04-03
    Redis学习笔记(十九) 发布订阅(上)
  • oracle触发器---记录修改历史
    select * from ordtaskremeb_logcreate table ordtaskremeb_log(timeinfo varchar(50),oldeqid varc...
    99+
    2022-10-18
  • oracle 触发器
    -- Create table a  触发器create table T_AC_TEST(  ID     ...
    99+
    2022-10-18
  • Oracle中触发器(2)
       上一篇对触发器的一些基本知识有了了解,在这一篇操作进行验证before触发器[oracle@test ~]$ sqlplus / as sysdbaSQL> cre...
    99+
    2022-10-18
  • oracle触发器定时触发怎么配置
    在Oracle数据库中,可以使用触发器来定时触发某些操作。触发器可在以下情况下自动触发:在插入、更新或删除表中的数据时,或在满足某些...
    99+
    2023-08-09
    oracle
  • Oracle DML触发器和DDL触发器实例详解
    目录一、概念二、DML触发器2.1、语句触发器2.2、行级触发器2.3、DML触发器语法:2.4、触发器谓词:2.5、实例说明三、DDL 触发器3.1、DDL触发器语法3.2、DDL...
    99+
    2023-03-13
    oracle 触发器 oracle触发器语句 oracle创建触发器语句
  • Oracle DML触发器和DDL触发器实例详解
    目录一、概念二、DML触发器2.1、语句触发器2.2、行级触发器2.3、DML触发器语法:2.4、触发器谓词:2.5、实例说明三、DDL 触发器3.1、DDL触发器语法3.2、DDL 事件3.3、可用属性3.4、实例说明...
    99+
    2023-03-13
    oracle 触发器 oracle触发器语句 oracle创建触发器语句
  • Oracle DML触发器和DDL触发器怎么使用
    今天小编给大家分享一下Oracle DML触发器和DDL触发器怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧...
    99+
    2023-07-05
  • Oracle 触发器详解(trigger)
    Oracle中的触发器是一种特殊的数据库对象,它是与表关联的一段PL/SQL代码,当特定的数据库操作发生时,触发器会自动执行这段代码...
    99+
    2023-09-20
    Oracle
  • Oracle系列:(30)触发器
    什么是触发器【Trigger】?不同的DML(select/update/delete/insert)操作,触发器能够进行一定的拦截,符合条件的操作方可操作基表;反之,不可操作基表。类似于Java...
    99+
    2022-10-18
  • oracle触发器是什么
    本篇文章给大家分享的是有关oracle触发器是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Oracle触发器是什么呢? 首先我们来了解一...
    99+
    2022-10-18
  • Oracle中的触发器trigger
    触发器是指被隐含执行的存储过程 一、创建DML触发器(before/after) 1、行触发器: 当一个DML操作影响DB中的多行时,对于其中复合触发条件的每行均触发一次(for e...
    99+
    2022-11-13
  • Oracle触发器trigger详解
    Oracle触发器(Trigger)是一种特殊的数据库对象,可以在数据库中的某个事件发生时自动执行一系列的操作。触发器通常与数据库表...
    99+
    2023-08-15
    oracle
  • Oracle专题16之触发器
    1、触发器的概述 a、触发器是什么? 触发器是指存放在数据库中,并且被隐含执行的存储过程。 当发生特定事件时,Oracle会自动执行触发器的相应代码。 b、触发器的类型 DML触发器;DDL触发器;替代(...
    99+
    2022-10-18
  • Oracle触发器实例代码
    Oracle触发器,用于选单后修改选单的表的触发动作。 --备货检验选单后 回写备货状态 CREATE OR REPLACE TRIGGER tri_TobaccoStockINSERT after I...
    99+
    2022-10-18
  • oracle如何关闭触发器
    这篇文章主要介绍“oracle如何关闭触发器”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“oracle如何关闭触发器”文章能帮助大家解决问题。 ...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作