今天用 select aplm.f_ss_get_seqid('P01',null,null,null) from dual ;
语句执行一个函数取值问题,结果报了ORA-14551: cannot perform. a DML operation inside a query -
查询资料发现:
对数据库有写操作(INSERT、UPDATE、DELETE、CREATE、ALTER、COMMIT)的函数,是无法简单的用SQL来调用的.
使用"自主事物",可以解决这个问题.
其实"自主事物"的功能,主要是解决回滚时,标记了PRAGMA AUTONOMOUS_TRANSACTION;的代码块不受外面调用的事物作用.
在解决触发器更新不成功时,如果按默认,记录日志的也将回滚,用该方法强制记录日志,效果较好.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7551038/viewspace-619690/ ,如需转载,请注明出处,否则将追究法律责任。