最近在执行一个函数时报一个错,“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操作但是没有事物开始,这下一想还真明白了。
结果:按上面的描述,在begin前面添加 PRAGMA AUTONOMOUS_TRANSACTION; 解决了在plsql编辑器里访问异常问题。