自治事务pragma autonomous_transaction的使用场景(3、解决ORA-14551错误)
有时候,我们想在一个函数中做一些复杂的处理,比如更新一个临时表数据,然后做一些UPDATE处理,最后返回一个处理结果。想必大部分开发人员在初期都试过这样的操作,最终的结果是啥?
PLSQL函数中不能做DML操作,报错ORA-14551: cannot perform a DML operation inside a query
此后,我们可能转而用带out参数的存储过程来间接实现业务需求。
其实,另一个解决方案就是自治事务,上面的函数只要加一句声明就解决了这个错误:
做了自治事务的声明后,不但函数中可以用DML语句,甚至可以使用DDL语句,比如CREATE TABLE ,CREATE INDEX等。因为自治函数内部所做的任何事务都独立于外部语句所运行的事务。