【报错】ORA-14551:无法在查询中执行DML操作

发布于 2016-07-26  5.73k 次阅读


最近使用报表工具,需要在查询的同时修改字段方便锁定该行数据。所以在select中调用了function函数,同时在function函数中update了表的某个字段。但是总是不成功,直接在plsql上操作,就报错:

PL/SQL“ ORA-14551: 无法在查询中执行 DML 操作

所以查询了方法,只谈方法,不谈根本哈,需要知道原因的请另外找下咯。

解决方法

在函数声明部分添加:PRAGMA AUTONOMOUS_TRANSACTION;

然后再执行完DML语句后记得提交:COMMIT;

下面是一个举例过程:

create or replace function YK_RECOMM_LOCK(MID_in in varchar2,
who_re in varchar2,
bid in varchar2)
return varchar2 is
PRAGMA AUTONOMOUS_TRANSACTION;
re varchar2(32);
begin
update YK_RECOMM_ANS ya
set ya.valid_state = 'P',
ya.proc_by = who_re,
ya.proc_time = sysdate,
ya.answer_1 = 'N',
ya.answer_2 = 'N',
ya.answer_3 = 'N',
ya.answer_4 = 'N',
ya.answer_5 = 'N',
ya.answer_6 = 'N',
ya.answer_other = 'N'
where mbr_id = MID_in
and batch_id = bid;
commit;
re := '已经锁定,可以回访';
return re;
end YK_RECOMM_LOCK;

好了,问题就这么解决了哈。


生命旅客,闷头赶路总不太可取,留一刻给那可爱可敬的人,留一眼给那靓丽迷人之景,也请善待自己~