plsql 触发器介绍 语句级别触发器、行级别触发器。
- /*
- 分类:
- 1、DDL触发器
- 执行create,alter,drop操作时,会激活的触发器
- 2、DML触发器
- 执行增、删除、修改时,激活的触发器
- 3、系统事件触发器
- 执行特定的系统事件时(启动、加载、登录、退出)
- 构成:
- 1、触发事件:会引起触发器执行的操作;DDL操作,DML操作,系统事件;
- 2、触发时间:before ,after, instead of:替代
- 3、触发条件:where 条件
- 4、触发对象:表、视图、数据库对象
- 5、触发频率:语句级别(表级别):执行一次,行级别:for each row :满足条件的每一行操作都会激活触发器;
- 6、触发操作:触发器中执行的操作;
- */
- -- 1、语句级别的触发器。(执行一次)
- -- before触发器 和 after触发器 刚执行语句 触发器跟着执行(1.判断语句是否执行 2.不给语句执行的机会) 和 语句可以先执行后设置的事件
- -- 理解:当用户执行某个操作时,会执行我所写的触发器
- -- oracle中创建一个触发器 create or replace 关键字trigger + 触发器的名字。
- create or replace trigger insertInterceptor
- after delete on emp -- 定义触发器的时间种类。 xx xx on xx 表名。
- declare
- v_money emp.sal%type;
- row1 emp%rowtype;
- cursor c(no emp.deptno%type) is select * from emp where deptno=no;
- begin
- insert into emp (empno,ename,job,sal) values(20,'学习','张三',2000);
- open c(20);
- loop
- fetch c into row1;
- exit when c%notfound;
- dbms_output.put_line(
- 'cursor index=='||c%rowcount||
- '姓名=='||row1.ename||
- '--------工资=='||row1.sal||
- '--------工作=='||row1.job
- );
- end loop;
- close c;
- end;
- -- 测试效果:删除20后新填入一个20在emp表中 并输出emp表中对应部门的 相关的 数据
- delete from emp where empno=20;
- --练习 禁止用户在emp中的删除数据 tg01
- alter trigger tg01 enable;
- alter trigger tg01 disable;
- delete from emp where empno=2;
- -- 禁止用户在emp中 update数据
- create or replace trigger updateMessage
- before update on emp
- declare
- begin
- raise_application_error(-20010,'禁止用户在emp中 update数据'); --注意oracle错误码 20000--20999;
- end;
- --测试
- update emp set ename='哈哈' where empno=7788;
- alter trigger updateMessage disable;
- -- 2、行级别触发器 for each row :满足条件的每一行操作都会激活触发器;
- create or replace trigger rowMessage
- before update or insert on emp for each row
- declare
- begin -- 如果条件执行 就给出相应的提示
- if updating then
- dbms_output.put_line('执行了更新的操作');
- if:old.sal>:new.sal then -- 逻辑表
- raise_application_error(-20002,'禁止给员工降工资!');
- end if;
- elsif inserting then
- dbms_output.put_line('执行了录入的操作');
- end if;
- end;
- --关闭触发器
- alter trigger updateMessage disable;
- alter trigger insertInterceptor disable;
- update emp set sal=sal+1 where deptno=20;
- commit;
- insert into emp (empno,ename,sal)values(5,'嘻嘻',500);
- select * from emp;
- select sal from emp where deptno=20;
- -- 删除触发器
- drop trigger tg02;
plsql 触发器介绍 语句级别触发器、行级别触发器。的更多相关文章
- 问题:Oracle出发器;结果:1、Oracle触发器详解,2、Oracle触发器示例
ORACLE触发器详解 本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创 ...
- Linux Shell 高级编程技巧3----运行级别脚本介绍
3.运行级别脚本介绍 3.1.运行级别 运行级别介绍: 0 关机 1 单用户模式 2 多用户模式 ...
- KingbaseES触发器介绍
触发器及其作用 触发器(trigger)是用户定义的由事件驱动的特殊过程.一旦定义,所有用户的对应操作均会由服务器自动激活相应的触发器,在DBMS核心层进行集中的完整性控制. 触发器类似于约束,但是比 ...
- SQL Server安全(10/11):行级别安全(Row-Level Security)
在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切.但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念.这篇文章提供了基础,因此你可以对SQL Se ...
- SQL Server 2016 行级别权限控制
背景 假如我们有关键数据存储在一个表里面,比如人员表中包含员工.部门和薪水信息.只允许用户访问各自部门的信息,但是不能访问其他部门.一般我们都是在程序端实现这个功能,而在sqlserver2016以后 ...
- SQL SERVER 触发器介绍
什么是触发器 触发器对表进行插入.更新.删除的时候会自动执行的特殊存储过程.触发器一般用在check约束更加复杂的约束上面.触发器和普通的存储过程的区别是:触发器是当对某一个表进行操作.诸如:upda ...
- SQL Server ->> 深入探讨SQL Server 2016新特性之 --- Row-Level Security(行级别安全控制)
SQL Server 2016 CPT3中包含了一个新特性叫Row Level Security(RLS),允许数据库管理员根据业务需要依据客户端执行脚本的一些特性控制客户端能够访问的数据行,比如,我 ...
- Hive修改行级别数据
我们知道Hive0.14版本之前是不支持行级别的插入,更新,删除的,0.14版本之后可以通过修改相关配置得以支持,但是在不修改默认配置的情况下是不是完全没有办法呢?不是的,这里有个比较简单的方法,前提 ...
- oracle的行级触发器使用
行级触发器: 当触发器被触发时,要使用被插入.更新或删除的记录中的列值,有时要使用操作前.后列的值. :NEW 修饰符访问操作完成后列的值 :OLD 修饰符访问操作完成前列的值 例1: 建立一个触发器 ...
随机推荐
- 【LeetCode】641. Design Circular Deque 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/design-ci ...
- 1275 - Internet Service Providers
1275 - Internet Service Providers PDF (English) Statistics Forum Time Limit: 2 second(s) Memory L ...
- Go package(3):io包介绍和使用
IO 操作的基本分类 在计算机中,处理文件和网络通讯等,都需要进行 IO 操作,IO 即是 input/ouput,计算机的输入输出操作. Go语言中的 IO 操作封装在如下几个包中: io 为 IO ...
- C++多线程并发---异步编程
线程同步主要是为了解决对共享数据的竞争访问问题,所以线程同步主要是对共享数据的访问同步化(按照既定的先后次序,一个访问需要阻塞等待前一个访问完成后才能开始).这篇文章谈到的异步编程主要是针对任务或线程 ...
- 细谈 == 和 equals 的具体区别 【包括equals源码分析】
1.前言 昨天舍友去面试,被面试官的问题难住了:俩个学生类除了学生姓名不同用.equal来比较. 我是一脸懵逼的 ,问题说的很模糊 , 理解字面意思为 :一个 实体类名叫Student ,内部属性有学 ...
- Word2010制作饭店活动宣传单
原文链接: https://www.toutiao.com/i6492754127343321613/ 打开Word文档,选择"页面布局"选项卡."页面背景"功 ...
- 51 Nod 1091 线段的重叠 (贪心算法)
原题链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1091 思路分析:通过读题不难发现这是一道涉及贪心算法的题,刚 ...
- Spring学习:简单实现一个依赖注入和循环依赖的解决
依赖注入 什么是依赖注入 使用一个会创建和查找依赖对象的容器,让它负责供给对象. 当a对象需要b对象时,不再是使用new创建,而是从容器中获取,对象与对象之间是松散耦合的关系,有利于功能复用. 依赖: ...
- Go Error 嵌套到底是怎么实现的?
原文链接: Go Error 嵌套到底是怎么实现的? Go Error 的设计哲学是 「Errors Are Values」. 这句话应该怎么理解呢?翻译起来挺难的.不过从源码的角度来看,好像更容易理 ...
- Redis 事务支持 ACID 么?
腾讯面试官:「数据库事务机制了解么?」 「内心独白:小意思,不就 ACID 嘛,转眼一想,我面试的可是技术专家,不会这么简单的问题吧」 程许远:「balabala-- 极其自信且从容淡定的说了一通.」 ...