写了trigger,代码如下:
create or replace trigger sync_nas_failReason_trigger
/**
**名称:网管接口失败信息同步
**功能:spjk给工作流回单时,一并将nas回填的失败信息同步到wo的remarks字段中,以提供前台展现
**created by zdp @ 2010/6/23
**/
after update on spjk_table
for each row
declare
woNbr varchar2(512);
backfillFlag varchar2(512);
spjkErrMsg varchar2(512);
woRemarks wo.remarks%type; --wo备注信息
tempInfo varchar2(512); --新拼接的wo备注信息
begin
--1.获取spjk表关键数据
select st.wo_nbr, st.backfill_flag, st.err_msg
into woNbr, backfillFlag, spjkErrMsg
from spjk_table st
where st.spjk_id = :new.spjk_id;
--2.当回填标志变为Y时,执行联动操作
if backfillFlag ='Y' then
--取原wo备注信息
select wo.remarks into woRemarks from wo where wo.wo_nbr =woNbr;
--拼接新信息
tempInfo :=substr(woRemarks||'==>'||spjkErrMsg,1,512);
--dbms_output.put_line( 'tempInfo='||tempInfo);
--执行联动操作
update wo set wo.remarks =tempInfo where wo.wo_nbr =woNbr;
end if;
end sync_nas_failReason_trigger;
执行的时候报错,如下:
ORA-04091:表XX发生了变化,触发器/函数不能读它
问题原因:
在于过程中用:new.spjk_id再次去查目标表,这一动作被oracle认为是不合法的。
--1.获取spjk表关键数据
select st.wo_nbr, st.backfill_flag, st.err_msg
into woNbr, backfillFlag, spjkErrMsg
from spjk_table st
where st.spjk_id = :new.spjk_id;
问题解决:
想获取当前记录的信息直接使用:new.来操作即可,oracle提供了这个机制,为啥还要曲折呢,上面的查询纯属多余,结果还导致了错误。
正确的程序如下:
create or replace trigger sync_nas_failReason_trigger
/**
**名称:网管接口失败信息同步
**功能:spjk给工作流回单时,一并将nas回填的失败信息同步到wo的remarks字段中,以提供前台展现
**created by zdp @ 2010/6/23
**/
after update on spjk_table
for each row
declare
woRemarks wo.remarks%type; --wo备注信息
tempInfo varchar2(512); --新拼接的wo备注信息
begin
--当回填标志变为Y时,执行联动操作
if :new.backfill_flag ='Y' then
--取原wo备注信息
select wo.remarks into woRemarks from wo where wo.wo_nbr =:new.wo_nbr;
--拼接新信息
tempInfo :=substr(woRemarks||'==>'||:new.err_msg,1,512);
--dbms_output.put_line( 'tempInfo='||tempInfo);
--执行联动操作
update wo set wo.remarks =tempInfo where wo.wo_nbr =:new.wo_nbr;
end if;
end sync_nas_failReason_trigger;
分享到:
相关推荐
8. **PL/SQL编程错误**:如ORA-06550(行XX,列XX:PL/SQL:SQL语句出错)和ORA-22903(无法从集合中选择NULL),这些错误通常涉及PL/SQL过程或函数中的逻辑错误。 9. **触发器和约束**:ORA-02091(触发器执行时...
其实我从来不认为Exp/Imp是一种好的备份方式,正确的说法是Exp/Imp只能是一个好的转储工具,特别是在小型数据库的转储,表空间的迁移,表的抽取,检测逻辑和物理冲突等中有不小的功劳。当然,我们也可以把它作为小型...
4. **数据库对象**:在Oracle中,数据库对象包括表、视图、索引、存储过程、触发器、函数和包等。理解这些对象的创建、修改和删除语法至关重要,它们是数据库应用开发的基础。 5. **数据类型**:Oracle9i支持多种...
2. PL/SQL:Oracle特有的过程化编程语言,结合了SQL的查询能力,用于编写存储过程、函数、触发器等。 四、Oracle安全管理 1. 用户与角色:创建并管理用户账户,分配权限和角色,以实现不同级别的访问控制。 2. 权限...
嵌入式八股文面试题库资料知识宝典-华为的面试试题.zip
训练导控系统设计.pdf
嵌入式八股文面试题库资料知识宝典-网络编程.zip
人脸转正GAN模型的高效压缩.pdf
少儿编程scratch项目源代码文件案例素材-几何冲刺 转瞬即逝.zip
少儿编程scratch项目源代码文件案例素材-鸡蛋.zip
嵌入式系统_USB设备枚举与HID通信_CH559单片机USB主机键盘鼠标复合设备控制_基于CH559单片机的USB主机模式设备枚举与键盘鼠标数据收发系统支持复合设备识别与HID
嵌入式八股文面试题库资料知识宝典-linux常见面试题.zip
面向智慧工地的压力机在线数据的预警应用开发.pdf
基于Unity3D的鱼类运动行为可视化研究.pdf
少儿编程scratch项目源代码文件案例素材-霍格沃茨魔法学校.zip
少儿编程scratch项目源代码文件案例素材-金币冲刺.zip
内容概要:本文深入探讨了HarmonyOS编译构建子系统的作用及其技术细节。作为鸿蒙操作系统背后的关键技术之一,编译构建子系统通过GN和Ninja工具实现了高效的源代码到机器代码的转换,确保了系统的稳定性和性能优化。该系统不仅支持多系统版本构建、芯片厂商定制,还具备强大的调试与维护能力。其高效编译速度、灵活性和可扩展性使其在华为设备和其他智能终端中发挥了重要作用。文章还比较了HarmonyOS编译构建子系统与安卓和iOS编译系统的异同,并展望了其未来的发展趋势和技术演进方向。; 适合人群:对操作系统底层技术感兴趣的开发者、工程师和技术爱好者。; 使用场景及目标:①了解HarmonyOS编译构建子系统的基本概念和工作原理;②掌握其在不同设备上的应用和优化策略;③对比HarmonyOS与安卓、iOS编译系统的差异;④探索其未来发展方向和技术演进路径。; 其他说明:本文详细介绍了HarmonyOS编译构建子系统的架构设计、核心功能和实际应用案例,强调了其在万物互联时代的重要性和潜力。阅读时建议重点关注编译构建子系统的独特优势及其对鸿蒙生态系统的深远影响。
嵌入式八股文面试题库资料知识宝典-奇虎360 2015校园招聘C++研发工程师笔试题.zip
嵌入式八股文面试题库资料知识宝典-腾讯2014校园招聘C语言笔试题(附答案).zip
双种群变异策略改进RWCE算法优化换热网络.pdf