关于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') 呢,有什么意义?

append()是拼接的意思,每次都从控制台接收数据然后拼接,append( '\n') 这个是拼接完继续拼接一个换行,\n是换行的意思, 参考技术A 在windows中换行是\n\r,\n表示换行,\r表示回车,\r和一种老式打印机有关。
在unix和Linux中换行是\n。本回答被提问者采纳

以上是关于关于oracle触发器的一个问题,求解答的主要内容,如果未能解决你的问题,请参考以下文章

关于oracle触发器问题请教

关于Oracle数据库的几个习题求答案。谢谢

SQL oracle的一些问题求解答

MySQL视图查询超慢,求解答

MySQL视图查询超慢,求解答

oracl遇到的问题