最近在执行一个函数时报一个错,“ORA-14551: 无法在查询中执行 DML 操作” ,“ORA-06512: 在 "LBX_CRM2018.GETLSHBYID", line 7”。经过研究后终于解决了问题。

分析:1、该函数是一个自动生成表唯一序列,编译过程没有什么报错现象。

           2、执行  select GETLSHBYID('tt') from dual 时则报出了上面的ORA-14551错误。

           3、而DML操作指的就是增、删、改,对比了一下自己写的其它函数,发现其它的函数都没有这个操作。

           4、百度搜索一翻,原来这是“自治事务和主事务问题”。

           5、下面的sql,包含了update\insert操作,虽然有commit操作但是没有事物开始,这下一想还真明白了。

ORA-14551: 无法在查询中执行 DML 操作-LMLPHP

结果:按上面的描述,在begin前面添加  PRAGMA AUTONOMOUS_TRANSACTION; 解决了在plsql编辑器里访问异常问题。

ORA-14551: 无法在查询中执行 DML 操作-LMLPHP

 

01-03 12:10