oracle触发器

快速学习Oracle-触发器

可紊 提交于 2019-12-19 10:59:35
简介 数据库触发器是一个与表相关联的、存储的 PL/SQL 程序。每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle 自动地执行触发器中定义的语句序列。 触发器可用于 数据确认 实施复杂的安全性检查 做审计,跟踪表上所做的数据操作等 数据的备份和同步 触发器的类型 语句级触发器:在指定的操作语句操作之前或之后执行一次,不管这条语句影响 了多少行 。 行级触发器(FOR EACH ROW) :触发语句作用的每一条记录都被触发。在行级触 发器中使用 old 和 new 伪记录变量, 识别值的状态。 语法 CREATE [or REPLACE] TRIGGER 触发器名 {BEFORE | AFTER} {DELETE | INSERT | UPDATE [OF 列名]} ON 表名 [FOR EACH ROW [WHEN(条件) ] ] begin PLSQL 块 End 触发器名 范例:插入员工后打印一句话“一个新员工插入成功” create or replace trigger testTrigger after insert on person declare -- local variables here begin dbms_output.put_line('一个员工被插入'); end testTrigger; 范例

MSSQL 基础知识001

爷,独闯天下 提交于 2019-12-18 02:45:17
数据库概述: DBMS(Database Management System,数据库管理系统)和数据库。 平时谈到“数据库”可能有两种含义:MSSQLServer、Oracle等某种DBMS;存放一堆数据表的一个分类( Catalog )。 不同品牌的DBMS有自己的不同的特点: MySQL (速度很快,适合对数据要求并不是十分严谨的地方,去掉了很多中小型企业中不常用的功能) MSSQLServer (与.net结合很好,只能运行在windows平台下,大数据量、大交易量表现并不十分好,功能比MySQL多) DB2(大型)、Oracle(大型)、Access(文件)、 SQLite(极其轻量级数据库) 、Sybase等。对于开发人员来讲,大同小异 SQL(语言)<>SQLServer<>MSSQLServer。最常见的错误。 除了Access、SQLServerCE、SQLite等文件型数据库之外,大部分数据库都需要数据库服务器才能运行。学习、开发时是连接本机的数据库,上线运行时是数据库运行在单独的服务器。 1:数据库附加时候报错:拒绝访问: 数据库文件权限不够 2:SQL Server数据库身份验证 Windows身份验证 :以当前登录本机的账户去登陆SQL Server,若有权限,则登录;和本机有多少实例账户无关

oracle 触发器基本语法

荒凉一梦 提交于 2019-12-17 13:26:14
–触发器基本语法 –查看员工表的人数 create or replace trigger tri_in_emp before --after insert on emp declare v_count int; begin select count(*) into v_count from emp; dbms_output.put_line(‘员工人数为:’||v_count); end; insert into emp values(); select * from emp 来源: CSDN 作者: 發財123 链接: https://blog.csdn.net/weixin_44245525/article/details/103574354

Oracle触发器用法及介绍

喜欢而已 提交于 2019-12-11 18:58:42
1、触发器简介 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行。因此触发器不需要人为的去调用,也不能调用。然后,触发器的触发条件其实在你定义的时候就已经设定好了。这里面需要说明一下,触发器可以分为语句级触发器和行级触发器。详细的介绍可以参考网上的资料,简单的说就是语句级的触发器可以在某些语句执行前或执行后被触发。而行级触发器则是在定义的了触发的表中的行数据改变时就会被触发一次。 具体举例: 1、 在一个表中定义的语句级的触发器,当这个表被删除时,程序就会自动执行触发器里面定义的操作过程。这个就是删除表的操作就是触发器执行的条件了。 2、 在一个表中定义了行级的触发器,那当这个表中一行数据发生变化的时候,比如删除了一行记录,那触发器也会被自动执行了。 2、触发器语法 触发器语法: create [or replace] tigger 触发器名 触发时间 触发事件 on 表名 [for each row] begin pl/sql语句 end 其中: 触发器名:触发器对象的名称。由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。 触发时间:指明触发器何时执行,该值可取: before:表示在数据库动作之前触发器执行; after:表示在数据库动作之后触发器执行。 触发事件:指明哪些数据库动作会触发此触发器: insert

mysql-常用组件之触发器

六月ゝ 毕业季﹏ 提交于 2019-12-06 06:39:40
基本概念 触发器是一种特殊的存储过程,不像存储过程需要显示调用,触发器通过监控表事件(增删改操作)自动触发某条 sql 的执行,可以用于购物车加购后库存减少等场景。 触发器基本操作 1. 创建触发器 DELIMITER $$ CREATE /*[DEFINER = { user | CURRENT_USER }]*/ TRIGGER `dbname`.`trigger` BEFORE/AFTER INSERT/UPDATE/DELETE ON `dbname`.`<Table Name>` FOR EACH ROW BEGIN -- 触发的 sql 动作 END$$ DELIMITER ; 触发时间: before:表中数据发生改变前的状态 after:表中数据发生改变后的状态 PS:如果 before 触发器失败或者语句本身失败,将不执行 after 触发器(如果有的话) 触发事件: INSERT DELETE UPDATE old/new 关键字 触发器针对的是数据库中的每一行记录,每行数据在操作前后都会有一个对应的状态,触发器将没有操作之前的状态保存到 old 关键字中,将操作后的状态保存到 new 中,不同类型的触发事件拥有不同的关键字类型: 触发事件类型 new/old使用 INSERT事件 没有 old,只有 new,new 表示将要(插入前)或者已经增加(插入后

oracle中查询表中的触发器,关闭启用操作

[亡魂溺海] 提交于 2019-12-05 13:54:35
1.查询指定表中有哪些触发器 select * from all_triggers WHERE table_name='表名' 2.禁用指定表中所有的触发器 alter table table_name disable all triggers; 3.启用指定表中所有的触发器 alter table table_name enable all triggers; 4.禁用指定表的触发器 alter trigger trigger_name disable; 5.启用指定的触发器 alter trigger trigger_name enable; 来源: https://www.cnblogs.com/jasonboren/p/11926293.html

数据库整理(五)数据库编程 触发器 事务 过程

白昼怎懂夜的黑 提交于 2019-12-03 08:07:05
数据库整理(五)数据库编程 嵌入式SQL 交互式SQL和嵌入式SQL是SQL的两种使用方法。将SQL语言嵌入到宿主语言程序中, 将SQL语言访问数据库的功能和宿主语言的数据处理功能相结合 ,这种使用SQL的方法称为嵌入式SQL。 SQL查询数据库的能力强,高级语言对复杂应用和复杂逻辑处理能力强 类似断言、触发器等操作需要对数据进行处理,原生SQL能力不强 数据库服务器只识别SQL语句,用SQL可以提高效率 如何实现嵌入式SQL? 宿主语言(简称 主语言 )的编译器不能识别SQL,如何将嵌有SQL语句的宿主语言编译成可执行代码? 宿主语言与DBMS之间如何传递数据和信息? 如何解决元组集合数据对宿主语言变量的赋值? 识别与处理SQL 数据库管理系统一般采用预编译方法处理,即由数据库管理系统的预处理程序对源程序进行扫描,识别出嵌入式SQL语句,把它们转换成主语言调用语句,以使主语言编译程序能识别它们,然后由主语言的编译程序将纯的主语言程序编译成目标码 为了调用,将SQL语言转变为函数调用 用EXEC SQL前缀来标识SQL语句 ,以区分宿主语言与SQL语言。 EXEC SQL <SQL语句>; 嵌入式SQL语句与主语言的通信 SQL负责操纵数据库,高级语言语句负责控制逻辑流程 数据库工作单元与源程序工作单元之间的通信主要包括: (1) 向主语言传递SOL语句的执行状态信息

oracle通过触发器记录登陆主机ip

匿名 (未验证) 提交于 2019-12-03 00:11:01
日常运维中,在v$session中,只记录了登陆主机名称,但是没有主机IP,排查问题时很不方便,特别是开放视图给第三方的情况。 原理:利用触发器在v$session中增加client_info字段信息 create or replace trigger on_logon_trigger after logon on database begin dbms_application_info.set_client_info(sys_context( 'userenv', 'ip_address' ) ); end; 关闭PLSQL重新登陆,确认一下,大功告成。其他未显示的需要待释放连接重新连接后才会触发触发器记录IP。 来源:博客园 作者: 拜拜五花肉 链接:https://www.cnblogs.com/lynsen/p/11591835.html

如何在Oracle触发器中使用查询语句

匿名 (未验证) 提交于 2019-12-02 23:57:01
通常情况下,Oracle数据库禁止在行级触发器或行级触发器所调用的子程序中使用查询语句。但是,面对复杂的业务逻辑,不可避免的要使用查询语句。 当在行级触发器中使用查询语句时,Oracle数据库会抛出ORA-04091异常。 Oracle官方文档中对ORA-04091异常的说明如下: ORA-04091: table string. string is mutating, trigger/function may not see it Cause: A trigger (or a user defined plsql function that is referenced in this statement) attempted to look at (or modify) a table that was in the middle of being modified by the statement which fired it. 如果必须要在Trigger中使用查询语句,Oracle也提供了一种途径。 下面以简单的代码为例做说明: 1 CREATE OR REPLACE TRIGGER TRG_TEST 2 BEFORE INSERT OR UPDATE OR DELETE ON SCOTT.EMP 3 FOR EACH ROW -- 行级触发器 4 DECLARE 5

oracle 触发器

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-30 10:28:45
一、触发器简介 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行。 因此触发器不需要人为的去调用,也不能调用。 然后,触发器的触发条件其实在你定义的时候就已经设定好了。 这里面需要说明一下,触发器可以分为语句级触发器和行级触发器。 详细的介绍可以参考网上的资料,简单的说就是语句级的触发器可以在某些语句执行前或执行后被触发。而行级触发器则是在定义的了触发的表中的行数据改变时就会被触发一次。 具体举例: 1、 在一个表中定义的语句级的触发器,当这个表被删除时,程序就会自动执行触发器里面定义的操作过程。这个就是删除表的操作就是触发器执行的条件了。 2、 在一个表中定义了行级的触发器,那当这个表中一行数据发生变化的时候,比如删除了一行记录,那触发器也会被自动执行了。 二、触发器语法 触发器的语法: create [or replace] tigger 触发器名 触发时间 触发事件 on 表名 [for each row] begin pl/sql语句 end 其中: 触发器名:触发器对象的名称。由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。 触发时间:指明触发器何时执行,该值可取: before:表示在数据库动作之前触发器执行; after:表示在数据库动作之后触发器执行。 触发事件:指明哪些数据库动作会触发此触发器: insert