触发器

如何在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-12-02 23:57:01
触发器名:触发器对象的名称。由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。 触发时间:指明触发器何时执行,该值可取: before:表示在数据库动作之前触发器执行; after:表示在数据库动作之后触发器执行。 触发事件:指明哪些数据库动作会触发此触发器: insert:数据库插入会触发此触发器; update:数据库修改会触发此触发器; delete:数据库删除会触发此触发器。 表 名:数据库触发器所在的表。 for each row:对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。 实例一: create or replace trigger UpdateEleHealthCard before insert ON hisapplicationform -- after insert or update on hisapplicationform -- after insert on hisapplicationform for each row -- DECLARE elehealthcardValue varchar2 ( 100 ); -- idwhere varchar2 ( 100 ); BEGIN --错误赋值方式 -- select new . HEALTHCARD into elehealthcard from

时钟复位

匿名 (未验证) 提交于 2019-12-02 23:56:01
同步复位设计   同步复位信号只有在时钟的有效沿到来时才能复位;   注意:复位是一个大的 扇出,应尽可能减小其到达本地逻辑前穿过的逻辑数量。               使用同步复位的优缺点:     优点:1.复位一般保证电路 100%同步 ;        2.同步复位保证复位只发生在有效时钟沿,时钟可以作为 过滤掉复位毛刺 的手段(抗干扰性好);        3.在设计中, 复位由一组内部条件产生 时用同步复位比较好,这样可以将时钟之间的复位毛刺过滤掉。     缺点:1.在 多时钟 设计中,同步复位可能需要一个 脉冲展宽 ,使时钟复位信号能出现在时钟有效沿处;        2.当复位信号 撤销时间 在建立时间和保持时间内时,也会产生亚稳态。 异步复位设计:   异步复位与时钟无关,触发器一般有复位端         异步复位设计的优缺点:     优点:1.触发器本身带有复位端, 电路相对简单 ,保证数据路径上相对干净;        2.电路不管有没有时钟都能复位,( 复位与时钟无关 )。     缺点:1.复位抗 干扰性差 ,对噪声毛刺敏感;        2.如果异步复位在触发器时钟有效沿附近释放,触发器就会进入 亚稳态 。 异步复位同步释放设计:   确保正确移除复位而设计:      将复位信号与时钟脉冲同步需要两个触发器

quartz2.3.0(十四)trigger触发器优先级排序

匿名 (未验证) 提交于 2019-12-02 23:52:01
job任务类: package org.quartz.examples.example14; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; /** * 一个简单的job任务 */ public class TriggerEchoJob implements Job { private static final Logger LOG = LoggerFactory.getLogger(TriggerEchoJob.class); // 必须要有public修饰的无参构造函数 public TriggerEchoJob() { } // 任务执行方法 public void execute(JobExecutionContext context) throws JobExecutionException { LOG.info("任务执行。TRIGGER: " + context.getTrigger().getKey()); } } 调度器类: package org.quartz.examples

ubuntu安装VLC出现依赖包版本过高解决方法

匿名 (未验证) 提交于 2019-12-02 23:49:02
cyl@cyl-Latitude-D630:~$ sudo apt-get install vlc 正在读取软件包列表... 完成 有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是 因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件 包尚未被创建或是它们已被从新到(Incoming)目录移出。 下列信息可能会对解决问题有所帮助: 下列软件包有未满足的依赖关系: E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。 所依赖的libgles2-mesa包版本过高,因为前几天整个系统升级了,结果因为一些原因没有升级成功,现在需要降低依赖包的版本,用以下命令: cyl@cyl-Latitude-D630:~$ sudo aptitude install vlc 0 个软件包被升级,新安装 9 个, 0 个将被删除, 同时 0 个将不升级。 需要获取 1,597 kB 的存档。 解包后将要使用 5,106 kB。 下列软件包存在未满足的依赖关系: 下列动作将解决这些依赖关系: 是否接受该解决方案?[Y/n/q/?] n (这个地方一定要选择NO,不能保持这个包的版本原状,要不VLC还是不能安装) 是否接受该解决方案?[Y/n/q/?] y (这一步选YES,因为是降级) 下列软件包将被“降级”: 下列“新

SQL触发器及视图

匿名 (未验证) 提交于 2019-12-02 23:42:01
版权声明:【北京Java青年】:456588754 https://blog.csdn.net/Amen_Wu/article/details/53457564 触发器:当emp表一条记录被删时,把被删记录写到日指表 Create table del_emp as select * from emp where 1=2; Select * from emp; Create or replace trigger tr_del_emp Before delete On emp For each Row When (old.deptno<>10) Begin Insert into ; 触发器类型: 模式触发器(DDL):模式中DDL语句; 数据库级触发器:开、关、登、退数据库系统事件时执行; DML触发器:行级、语句级、instead of(视图)触发器。 触发器的三个部分: 1. 触发器语句(事件):定义激活触发器的DML事件、DDL事件 Before delete On emp For each row 2. 触发器限制:执行触发器条件,条件为真时才激活触发器 When (old.dept<>10) 触发器操作(主体):包含一些SQL语句、代码,在触发语句发出且触发条件为真时运行。 Begin Insert into del_emp(deptno,empno,… …) //

触发器模板

匿名 (未验证) 提交于 2019-12-02 23:42:01
AS BEGIN SET a.FEntrySelfS0153 =b.fbase ,a.FEntrySelfS0154 =b.fbase1 from inserted m inner join t_rpContractEntry b on a.FSourceInterId=b.fcontractid and a.fitemid=b.fproductid END GO --停用触发器 ALTER TABLE SEOrderEntry DISABLE TRIGGER diyqql_all_SO --启用触发器 ALTER TABLE SEOrderEntry ENABLE TRIGGER diyqql_all_SO --检查触发器的启用/停用状态 SELECT so_tr.name AS TriggerName, so_tbl.name AS TableName, t.TABLE_SCHEMA AS TableSchema FROM sysobjects so_tr INNER JOIN sysobjects so_tbl ON so_tr.parent_obj = so_tbl.id INNER JOIN INFORMATION_SCHEMA.TABLES t ON t.TABLE_NAME = so_tbl.name WHERE so_tr.type ='TR' and t

数据库示例--触发器

匿名 (未验证) 提交于 2019-12-02 23:42:01
Sqlserver示例--触发器 insert create trigger tri_insert on student for insert as declare @student_idchar(10) select @student_id=s.student_id from students inner join insertedion s.student_id=i.student_id if @student_id='0000000001' begin raiserror('不能插入1的学号!',16,8) rollbacktran end go update create trigger tri_update on student for update as if update(student_id) begin raiserror('学号不能修改!',16,8) rollbacktran end go delete create trigger tri_delete on student for delete as declare @student_idvarchar(10) select @student_id=student_id from deleted if @student_id='admin' begin raiserror('错误',16,8)