Oracle触发器表发生了变化 触发器不能读它的解决方法(必看)

发布时间 - 2026-01-11 00:33:00    点击率:

出现原因,是因为在更新的的表和读取的表是同一个表。

CREATE or replace TRIGGER T_userupdateT BEFORE update ON T_user REFERENCING OLD AS old NEW AS N_ROW  FOR EACH ROW 
DECLARE U_xtfidemp1 varchar(36);
 u_xtempcode1 varchar(20);
 u_xtempcodeCount int:=0; 
 U_xtfidempCount int:=0; 
 u_id1 int:=0; 
BEGIN 
 U_xtfidemp1:=:N_ROW.U_xtfidemp;
 u_xtempcode1:=:N_ROW.u_xtempcode;
 u_id1:=:N_ROW.u_id;
 select count(u_xtempcode) into u_xtempcodeCount from eas.T_user where u_xtempcode is not null and u_xtempcode=u_xtempcode1 and u_id<>u_id1;
 select count(U_xtfidemp) into U_xtfidempCount from eas.T_user where U_xtfidemp is not null and U_xtfidemp=U_xtfidemp1 and u_id<>u_id1; 
 IF u_xtempcodeCount>0 or U_xtfidempCount>0 THEN
     RAISE_APPLICATION_ERROR(-20001, 'eas.T_user u_xtempcode,U_xtfidemp,U_GZCode更新数据时有错误,有重复');
 END IF;
 end;

出现错误时,是因为触发器在T_userupdateT在T_user上,触发器内部有读取了T_user所以有错误。

修改如下

CREATE or replace TRIGGER T_userupdateT BEFORE update ON T_user REFERENCING OLD AS old NEW AS N_ROW  FOR EACH ROW 
DECLARE U_xtfidemp1 varchar(36);
 u_xtempcode1 varchar(20);
 u_xtempcodeCount int:=0; 
 U_xtfidempCount int:=0; 
 u_id1 int:=0; 
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN 
 U_xtfidemp1:=:N_ROW.U_xtfidemp;
 u_xtempcode1:=:N_ROW.u_xtempcode;
 u_id1:=:N_ROW.u_id;
 select count(u_xtempcode) into u_xtempcodeCount from eas.T_user where u_xtempcode is not null and u_xtempcode=u_xtempcode1 and u_id<>u_id1;
 select count(U_xtfidemp) into U_xtfidempCount from eas.T_user where U_xtfidemp is not null and U_xtfidemp=U_xtfidemp1 and u_id<>u_id1; 
 IF u_xtempcodeCount>0 or U_xtfidempCount>0 THEN
     RAISE_APPLICATION_ERROR(-20001, 'eas.T_user u_xtempcode,U_xtfidemp,U_GZCode更新数据时有错误,有重复');
 END IF;
COMMIT;
 end;

多了PRAGMA AUTONOMOUS_TRANSACTION;COMMIT;两句

以上这篇Oracle触发器表发生了变化 触发器不能读它的解决方法(必看)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# oracle  # 触发器  # oracle 存储过程、函数和触发器用法实例详解  # Oracle中触发器示例详解  # 详解oracle中通过触发器记录每个语句影响总行数  # Oracle触发器trigger详解  # Oracle触发器用法实例详解  # oracle 调试触发器的基本步骤  # 是因为  # 给大家  # 希望能  # 两句  # 这篇  # 必看  # 解决方法  # 小编  # 大家多多  # 有错误  # 出现错误  # 发生了  # DECLARE  # ROW  # N_ROW  # u_xtempcodeCount  # int  # varchar  # REFERENCING  # brush 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何登录建站主机?访问步骤全解析  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  如何利用DOS批处理实现定时关机操作详解  如何快速搭建高效香港服务器网站?  EditPlus 正则表达式 实战(3)  Laravel怎么使用Intervention Image库处理图片上传和缩放  如何撰写建站申请书?关键要点有哪些?  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  Laravel如何实现用户注册和登录?(Auth脚手架指南)  Android利用动画实现背景逐渐变暗  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  如何将凡科建站内容保存为本地文件?  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  如何在建站主机中优化服务器配置?  java ZXing生成二维码及条码实例分享  如何快速上传建站程序避免常见错误?  phpredis提高消息队列的实时性方法(推荐)  Laravel PHP版本要求一览_Laravel各版本环境要求对照  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  javascript中对象的定义、使用以及对象和原型链操作小结  js实现点击每个li节点,都弹出其文本值及修改  html5的keygen标签为什么废弃_替代方案说明【解答】  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  Linux系统命令中tree命令详解  北京的网站制作公司有哪些,哪个视频网站最好?  如何快速搭建高效WAP手机网站吸引移动用户?  千库网官网入口推荐 千库网设计创意平台入口  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  如何在云服务器上快速搭建个人网站?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  android nfc常用标签读取总结  jQuery中的100个技巧汇总  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  如何用JavaScript实现文本编辑器_光标和选区怎么处理  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  网站制作价目表怎么做,珍爱网婚介费用多少?  详解Android图表 MPAndroidChart折线图  深圳网站制作的公司有哪些,dido官方网站?  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  油猴 教程,油猴搜脚本为什么会网页无法显示?  米侠浏览器网页背景异常怎么办 米侠显示修复