日期:2014-05-16 浏览次数:20491 次
问题描述:在函数中查询某张表前对表做了更新和插入操作,使表数据发生了变化,而函数返回的数据已经发生变化,导致出错. ? 如果在触发器中调用了存储过程,并且在触发器中对表A进行了更新,然后又在存储过程中对表A进行了插入,如此操作就会导致该问题的产生。 ? 解决方案:尽量调整操作的方法,一步到位,不要做两个更新操作。 解决办法:在函数BEGIN之前加入一个自治事务pragma autonomous_transaction; 并且在END之前提交commit; 就OK了... 其中PRAGMA关键字通知PL/SQL编译器,将声明它的这个PL/SQL代码块分割为一个自治的或独立的事务. 例如: return varType is Result varType; pragma autonomous_transaction; begin ??????? …… ??????? …… ???????commit; end;
function fun_Getxx(i_input varType)
??????? return Result;