关于oracle触发器的一个问题,求解答
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于oracle触发器的一个问题,求解答相关的知识,希望对你有一定的参考价值。
create or replace trigger CKUPDATEKCL_YHMD after insert on LCWZGL_LLDMX_NEW For each rowBegin UPDATE LCWZGL_WZXX SET (PJJG,kcl,kcyxz) = (select pjdj,kcl,'' from v_lcwzgl_kcl where wzbmsheetid = :new.WZBMSHEETID) WHERE SHEETID = :new.WZBMSHEETID;End;以上是我建的触发器,当我执行语句“insert into LCWZGL_LLDMX_NEW(sheetid,wzbmsheetid) values(sys_guid(),'23232')”时,报错如下图,求指点,谢谢!!
由于Oracle任务事务未提交,数据存在不一致,所以不允许读写这个表,报错ORA-04091;你可以用自治事务处理,不过自治事务的话,获取的:NEW不是新的,而旧的,不知道满不满足你的要求.
另外你可以建一个临时表,然后建两个触发器,主表中插入数据时,往临时表里插一条,然后在临时表上再建个触发器,去修改主表的值,就不会出现这个错误了 参考技术A 看起来没什么问题 (PJJG,kcl,kcyxz) = (select pjdj,kcl,'' 对应三个字段中kcyxz更新为空? 参考技术B 你这个 v_lcwzgl_kcl 看名字, 是个视图.
理论上这个视图里面查询了 LCWZGL_LLDMX_NEW 这个表.
Oracle 的 For each row 触发器, 不允许在触发器内部, SELECT / UPDATE 当前被触发的表.
因此, 就抱错了。
菜鸟求解答java关于append( '\n') 的问题
import java.util.* ;
import java.text.* ;
import java.io.* ;
public class ScannerDemo05
public static void main(String args[])
File f = new File( "D:" + File.separator + "test.txt") ; // 指定操作文件
Scanner scan = null ;
try
scan = new Scanner(f) ; // 从键盘接收数据
catch(Exception e)
StringBuffer str = new StringBuffer() ;
while(scan.hasNext())
str.append(scan.next()).append( '\n') ; // 取数据
System.out.println( "文件内容为:" + str) ;
;
菜鸟求解答:str.append(scan.next()).append( '\n') 这句话什么意思?为什么要加append( '\n') 呢,有什么意义?
在unix和Linux中换行是\n。本回答被提问者采纳
以上是关于关于oracle触发器的一个问题,求解答的主要内容,如果未能解决你的问题,请参考以下文章