/*
分类:
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 触发器介绍 语句级别触发器、行级别触发器。的更多相关文章

  1. 问题: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 创 ...

  2. Linux Shell 高级编程技巧3----运行级别脚本介绍

    3.运行级别脚本介绍    3.1.运行级别        运行级别介绍:            0    关机            1    单用户模式            2    多用户模式 ...

  3. KingbaseES触发器介绍

    触发器及其作用 触发器(trigger)是用户定义的由事件驱动的特殊过程.一旦定义,所有用户的对应操作均会由服务器自动激活相应的触发器,在DBMS核心层进行集中的完整性控制. 触发器类似于约束,但是比 ...

  4. SQL Server安全(10/11):行级别安全(Row-Level Security)

    在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切.但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念.这篇文章提供了基础,因此你可以对SQL Se ...

  5. SQL Server 2016 行级别权限控制

    背景 假如我们有关键数据存储在一个表里面,比如人员表中包含员工.部门和薪水信息.只允许用户访问各自部门的信息,但是不能访问其他部门.一般我们都是在程序端实现这个功能,而在sqlserver2016以后 ...

  6. SQL SERVER 触发器介绍

    什么是触发器 触发器对表进行插入.更新.删除的时候会自动执行的特殊存储过程.触发器一般用在check约束更加复杂的约束上面.触发器和普通的存储过程的区别是:触发器是当对某一个表进行操作.诸如:upda ...

  7. SQL Server ->> 深入探讨SQL Server 2016新特性之 --- Row-Level Security(行级别安全控制)

    SQL Server 2016 CPT3中包含了一个新特性叫Row Level Security(RLS),允许数据库管理员根据业务需要依据客户端执行脚本的一些特性控制客户端能够访问的数据行,比如,我 ...

  8. Hive修改行级别数据

    我们知道Hive0.14版本之前是不支持行级别的插入,更新,删除的,0.14版本之后可以通过修改相关配置得以支持,但是在不修改默认配置的情况下是不是完全没有办法呢?不是的,这里有个比较简单的方法,前提 ...

  9. oracle的行级触发器使用

    行级触发器: 当触发器被触发时,要使用被插入.更新或删除的记录中的列值,有时要使用操作前.后列的值. :NEW 修饰符访问操作完成后列的值 :OLD 修饰符访问操作完成前列的值 例1: 建立一个触发器 ...

随机推荐

  1. 【LeetCode】355. Design Twitter 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  2. 【LeetCode】621. Task Scheduler 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 公式法 日期 题目地址:https://leetco ...

  3. Codeforces629 C. Famil Door and Brackets

    C. Famil Door and Brackets time limit per test 2 seconds memory limit per test 256 megabytes input s ...

  4. HTML网页设计基础笔记 • 【第5章 常用的样式属性】

    全部章节   >>>> 本章目录 5.1 字体及文本属性 5.1.1 字体属性 5.1.2 文本属性 5.2 边距和填充 5.2.1 边距 5.2.2 填充 5.3 边框属性 ...

  5. 如何使用NiFi等构建IIoT系统

    您认为构建一个先进的工业物联网原型需要多长时间: 从传感器收集数据到每个工厂的网关 将传感器数据从一个或多个工厂移至云或数据中心 自动热部署新配置到所有边缘设备 支持大规模数据量和端到端安全性 使用正 ...

  6. 【Linux】Linux安装JDK

    1.下载linux版本的JDK1.8 链接:JDK下载链接 提取码:fxn4 链接:Xshell下载链接 提取码:439l 2.使用Xshell连接虚拟机,上传文件 在 /usr目录下创建一个新文件夹 ...

  7. Zookeeper基础教程(四):C#连接使用Zookeeper

    Zookeeper作为分布式的服务框架,虽然是java写的,但是强大的C#也可以连接使用. C#要连接使用Zookeeper,需要借助第三方插件,而现在主要有两个插件可供使用,分别是ZooKeeper ...

  8. 【工控老马】OPC通讯协议解析-OPC七问

    1 通讯步骤 1.1 第一问 OPC Client和OPC Server之间通讯谁是主动的? 答:当然是OPC Client. 1.2 第二问 OPC Client第一次动作做了什么? 答:从大多数O ...

  9. docker容器的本质

    1. 容器其实就是Linux下一个特殊的进程: 2. Docker容器通过namespace实现进程隔离通过cgroups实现资源限制: 3. Docker镜像(rootfs)是一个操作系统的所有文件 ...

  10. spring5无法在控制台打印日志的原因

    想要在控制台输出spring的日志,却无法输出,log4j2所需要的jar文件都已经导入,log4j2的配置文件也存在,调整日志级别也不行,一通百度后发现是缺少spring的jcl的jar文件,把sp ...