前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我的ODP.NET开发之路3-ORA-14551: cannot perform a DML operation inside a query

我的ODP.NET开发之路3-ORA-14551: cannot perform a DML operation inside a query

作者头像
崔文远TroyCui
发布2019-02-27 10:13:19
7460
发布2019-02-27 10:13:19
举报
文章被收录于专栏:远在上海远在上海

昨天下午写了2个Function,一个是从ERP LN中读出来Item-Purchase BP中的一个指定的Item和BP的BlockingReason,另一个是按照指定的ID从应用系统中读出来Item和BP,从而调用第一个Function返回真正的BlockingReason,在每一个Function中,都有一段如果报错就调用写错误日志的存储过程。在实际的使用中使用:Select Function2(ID) from Dual;,但是老报以下错误:

<br/>ORA-06502: PL/SQL: numeric or value error: character string buffer too small<br/>ORA-06512: at "TROY.ONTRAC_QRS_PKG", line 760<br/>ORA-14551: cannot perform a DML operation inside a query <br/>ORA-06512: at "TROY.COMMON_SYSTEMLOG_PKG", line 43<br/>ORA-06512: at "TROY.COMMON_BAANBRIDGE_PKG", line 339<br/>ORA-01403: no data found <br/>

经过查询,原因是“对数据库有写操作(INSERT、UPDATE、DELETE、CREATE、ALTER、COMMIT)的函数,是无法简单的用SQL来调用的”。按照这篇文章:[URL=http://www.cnblogs.com/pengyq/archive/2008/11/26/1341656.html]ORA-14551: cannot perform a DML operation inside a query [/URL],加上了“自主事务”:PRAGMA AUTONOMOUS_TRANSACTION; ,不过需要注意在Delcare的部分加入“PRAGMA AUTONOMOUS_TRANSACTION;”之后,必须在SQL语句后面加入“COMMIT;”

看如下例子:

<br/>    /*/* RFD #50 20111214 new start Troy Cui */<br/>    PRAGMA AUTONOMOUS_TRANSACTION;<br/>    /*/* RFD #50 20111214 new end Troy Cui */<br/>    BEGIN<br/>    <br/>        select trim(nvl(FirstName, '') || ' ' || nvl(LastName, ''))<br/>          into sDisplayName<br/>          from COMMON_Users<br/>         where UserID = nLoggedByID;<br/><br/>        if (sDisplayName = '') then <br/>            sDisplayName := '- unassigned -';<br/>        end if;<br/>    <br/>        insert into COMMON_SystemLog(LoggedByID, LogDate, LogCategory, LogEntry, AccessLevel, <br/>                                     Source, DataDump, DisplayName)<br/>                              values(nLoggedByID, SYSTIMESTAMP, sLogCategory, sLogEntry, nAccessLevel,<br/>                                     sSource, sDataDump, sDisplayName);<br/>        /*/* RFD #50 20111214 new start Troy Cui */<br/>        COMMIT;<br/>        /*/* RFD #50 20111214 new end Troy Cui */<br/><br/>    END WriteLog;<br/>

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2011年12月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档