ORA-04092: COMMIT 不能在触发器中】的更多相关文章

触发器无需commit也不能写commit触发器和触发它的DML是同一个事务DML提交了,触发器的操作也提交了,要不就一起回滚了 当然,如果你一定要在触发器里写COMMIT那就用自治事务相当于一个事务里的子事务 正常情况下,Oracle规定在触发器中不能运行 ddl语句和commit,rollback语句. 解决办法有两种: 1.在可以在触发器中加入:pragma autonomous_transaction; 表示自由事务处理.如: CREATE OR REPLACE TRIGGER T_cr…
很多场景中,我们使用触发器来回滚一些不满足业务逻辑的修改,这没有问题,问题是我能在触发器中提交事务吗? 这个问题很小白,当也来测试一下 /*测试中创建三种表,对表 TB2 插入时触发触发器,在触发器中将TB2中新插入的数据插入到 TB3 和 TB4*/USE TestDBGO  DROP TABLE TB2GODROP TABLE TB3GODROP TABLE TB4GOCREATE TABLE TB2( ID INT PRIMARY KEY IDENTITY, C1 INT)GOCREATE…
通常情况下,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 defi…
SQL触发器中的deleted表和inserted表 在触发器语句中用两个特殊的表一个是deleted表和inserted.它们是通过触发器操作自动创建驻留在内存中的临时表. 描述: Deleted表用于存储 DELETE和 UPDATE语句所影响的行的复本.在执行DELETE或 UPDATE语句时,行从触发器表中删除,并传输到 deleted表中.Deleted表和触发器表通常没有相同的行. Inserted 表用于存储 INSERT 和 UPDATE 语句所影响的行的副本.在一个插入或更新事…
oracle触发器中增删改查本表 (1)只有before insert触发器中才可以查询或更新本表 create or replace trigger tri_test_ins before insert on test for each row declare   v_cnt integer; begin  select count(*) into v_cnt from test;  dbms_output.put_line('test count:'||to_char(v_cnt));  u…
触发器语句中使用了两种特殊的表:deleted 表和 inserted 表.Microsoft? SQL Server 2000 自动创建和管理这些表.可以使用这两个临时的驻留内存的表测试某些数据修改的效果及设置触发器操作的条件:然而,不能直接对表中的数据进行更改. inserted和deleted表主要用于触发器中: ·扩展表间引用完整性 ·在以视图为基础的基表中插入或更新数据 ·检查错误并基于错误采取行动 找到数据修改前后表状态的差异,并基于此差异采取行动. Deleted表用于存储DELE…
SQL server触发器中 update insert delete 分别给写个例子以及解释下例子的作用和意思被, 万分感谢!!!! 主要想知道下各个语句的书写规范. INSERT: 表1 (ID,NAME) 表2 (ID,NAME) 当用户插入表1数据后,表2也被插入相同的数据 CREATE TRIGGER TRI1 ON 表1 FOR INSERT AS BEGIN  INSERT INTO 表2 SELECT * FROM INSERTED END GO DELETE: 表1 (ID,N…
在Sql Server触发器中判断操作是Insert还是Update还是Delete DECLARE    @IsInsert bit,    @IsUpdate bit,    @IsDelete bit IF EXISTS(SELECT 1 FROM inserted) AND NOT EXISTS(SELECT 1 FROM deleted)    SET @IsInsert = 1ELSE    SET @IsInsert = 0 IF EXISTS(SELECT 1 FROM inse…
在触发器中使用了系统宏变量,当条件满足时,如果这个宏代表的内容超过了20个字符,那么在首页信息就显示不全,会有一堆省略号 感谢https://blog.csdn.net/yu415907917/article/details/88822662的帮助,不过他是直接将函数中的判断注释掉了,稳妥起见,还是把对20的判断增大,避免为知的错误. vim /usr/share/zabbix/include/items.inc.php 将这个函数中对于20字符长度的判断注释掉,信息将全部显示.不再有字符长度限…
windows环境下的Git Bash中注释的换行: 使用单引号. 或者是在Linux系统里面用终端 git add . git commit -m ' . this is the test . update file ' git commit -s -m "message"     #用于显示signed-off-by git log日志显示的内容如下: $ git log commit c334f02266fed9139f8b07913c442f10938ad92a Author:…
做一个表的insert的trigger,目的是只修改插入行的字段. CREATE OR REPLACE TRIGGER TR_RME_SLOT BEFORE INSERT ON RME_SLOT FOR EACH ROW BEGIN IF (:NEW.POSITION >= 0 AND :NEW.POSITION <10) THEN :NEW.SLOT_NAME := '0'||TO_CHAR(:NEW.POSITION); ELSE :NEW.SLOT_NAME := TO_CHAR(:NE…
开发也有年头了,但是触发器确实用的比较少,但是无容置疑触发器确实不错, 最近项目要求需要用到的触发器特别多.频繁,觉得很有必要记录和积累下. 在触发器语句中用两个特殊的表一个是deleted表和inserted. 它们是通过触发器操作自动创建驻留在内存中的临时表. ---------------------------------------------------------------------------------------------------------------------…
declare @code varchar(20), @cs varchar(20),@zc varchar(20)set @cs='('+@cs+'*'+@zc+')'print '字符'+@csinsert into TESTER2 values(@cs,@zc,@cs) declare @code varchar(20), @cs varchar(20),@zc varchar(20)set @cs='1'set @zc='2'set @cs='('+@cs+'*'+@zc+')'prin…
触发器生效逻辑 在Before或者After之后使用INSERT,DELETE,UPDATE 触发器内情况判断 插入 if exists(select 1 from inserted) and not exists(select 1 from deleted) 删除 ELSE if exists(select 1 from deleted) and not exists(select 1 from inserted) 更新 ELSE if exists(select 1 from deleted…
CREATE trigger 触发器名 on 表名 for update,delete as set nocount on create table #t(EvebtType varchar(60),Parameters int,EventInfo varchar(2000)) declare @id varchar(20) set @id=@@spid insert #t exec('DBCC INPUTBUFFER ('+@id+')') if exists (select 1 from #…
create or replace trigger TRI_PrintTest before delete or insert or update on TEST_EXAM --触发事件 for each row -- 每修改一行都需要调用此过程 begin dbms_output.put_line(:new.IDNEW); --IDNEW字段更新后的值 dbms_output.put_line(:old.IDNEW); --IDNEW字段更新前的值 end; --原IDNEW字段是1时, --…
转载▼     create or replace trigger TRI_PrintTest before delete or insert or update on TEST_EXAM --触发事件 for each row -- 每修改一行都需要调用此过程 begin dbms_output.put_line(:new.IDNEW);     --IDNEW字段更新后的值 dbms_output.put_line(:old.IDNEW);       --IDNEW字段更新前的值 end;…
<Style.Triggers>            <!--<Trigger Property="IsSelected" Value="True">               <Setter Property="Background" Value="#3d7cff"/>            </Trigger>-->            <Trigge…
declare @name nvarchar(50); declare @name_pin nvarchar(50); set @name_pin = '%'+@name +'%' 模糊查询: select   @name = name  from  [DataBase]  where name  like  @name_pin…
今天做了一个需要用到触发器实现的功能中间去到了各种问题,还好最后都解决了: 整个过程中真是遇到了不少错误: ORA-04091: 表 KPGO.T_ISSUER 发生了变化, 触发器/函数不能读它 ORA-04092: COMMIT 不能在触发器中 ORA-04098:触发器“xx.xxx”无效且未通过重新定义 首先说第一个错是因为这样的代码: 原因是 触发器和存储过程中中用:再次去查目标表(就是你触发器服务的那张表),这一动作被oracle认为是不合法的. 目标表的记录行如果做了更新,无需再通…
触发器无需commit也不能写commit触发器和触发它的DML是同一个事务DML提交了,触发器的操作也提交了,要不就一起回滚了 当然,如果你一定要在触发器里写COMMIT那就用自治事务相当于一个事务里的子事务 正常情况下,Oracle规定在触发器中不能运行 ddl语句和commit,rollback语句. 解决办法有两种: 1.在可以在触发器中加入:pragma autonomous_transaction; 表示自由事务处理.如: create or replace trigger UPDA…
触发器不能调用或间接调用COMMIT,ROLLBACK等DCL语句 在触发器中不能运行 ddl语句和commit,rollback语句 ddl语句:DDL语句用语定义和管理数据库中的对象,如Create,Alter,Drop,truncate等:DDL操作是隐性提交的!         操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger DML(Data Manipulation Language)数据操纵语言命令使用户能够查询数据库以及操作已有数…
摘要: 本文讨论了利用数据库中的触发器对日志管理进行设计与实现的方法, 是对原来在客户端软件中编写日志管理方法的一种改进, 并给出了 Oracle9i 中的实例演示.关键词: Oracle; 触发器; 日志管理中图分类号: TP311文献标识码: A文章编号: 1009- 3044(2008)16- 21186- 02The Application of Oracle Trigger in the Developing of Log ManagementWU Heng- liang, ZHANG…
·触发器(trigger) [触发器本质上还是一个存储过程,只不过不是用exe来调用执行,而是通过增删改数据库的操作] [触发器只对增.删.改有效] 触发器的格式 (instead of与for的区别 如下) instead of: create trigger 触发器名(TR_表名_操作) on 表名 instead of 增或删或改 --当为instead of时,go下的代码不执行只起到触发的作用,只执行as里面的代码 as as里面随便写代码 go go下的代码只能是 增或删或改 for…
本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2.3 创建替代(INSTEAD OF)触发器 8.2.3 创建系统事件触发器 8.2.4 系统触发器事件属性 8.2.5 使用触发器谓词 8.2.6 重新编译触发器 8.3 删除和使能触发器 8.4 触发器和数据字典 8.5   数据库触发器的应用举例 触发器是许多关系数据库系统都提供的一项技术.在O…
1.oracle 中创建触发器示例 CREATE TABLE "CONCEPT"."FREQUENCYMODIFYLOG" ( "FREQUENCYID" NUMBER(10,0), "NAME" NVARCHAR2(30), "CODE" VARCHAR2(10 CHAR), "MNEMONICCODE" VARCHAR2(10 CHAR), "SPELLCODE"…
一.对待存储过程和函数的态度 优点: 1.存储过程只在创建时进行编译,sql语句则每次执行都需要编译.能提高数据库执行速度. 2.简单复杂操作结合事物一起封装. 3.复用性高. 4.安全性高,可指定存储过程的使用权. 在实际项目中应该尽量少用存储过程和函数,理由如下: 1.移植性差,在MySQL中的存储过程移植到sqlsever上就不一定可以用了. 2.调试麻烦,在db中报一个错误和在应用层报一个错误不是一个概念,那将是毁灭性打击,直接一个error:1045什么的更本毫无头绪. 3.扩展性不高…
原文:在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路. 在触发器中,当明细表插入数据时调用主表对应的数据 http://bbs.csdn.net/topics/390631301 大家好,由于金蝶ERP没法根据报价单里面的备品率自动算出备品数.所以需要建一个触发起.…
1.commit_form针对form上面的数据变动进行commit,对于代码中的类似update,insert语句也进行提交:如果form上面的数据变动和代码中的数据变动有冲突,最后以界面上的为准.2.do_key('commit_form')会首先寻找form下的triggers中的KEY-COMMIT这个trigger,并执行KEY-COMMIT中所写的代码.如果没有KEY-COMMIT这个trigger,则会针对form和代码一起提交.如果form上面的数据变动和代码中的数据变动有冲突,…
在SQL Server 2005中,通过新增的Service Broker可以实现异步触发器的处理功能.本文提供一种使用Service Broker实现的通用异步触发器方法. 在本方法中,通过Service Broker构造异步触发器处理架构,对于要使用这种架构的表,只需要创建相应的触发器及处理触发器中数据的存储过程,并且在异步触发器架构中登记触发器和处理的存储过程即可.如果一个触发器中的数据要被多个表使用,只需要在dbo.tb_async_trigger_subscribtion中登记相应处理…