【问题标题】:Oracle / update query inside pipelined table function流水线表函数内的 Oracle / 更新查询
【发布时间】:2018-07-16 20:03:11
【问题描述】:

我有一个工作正常的流水线表函数。

我现在需要的是在这个函数中执行更新查询:

create or replace FUNCTION test(A varchar2 )
 RETURN type_As PIPELINED  as row_type type_A;
Begin
....
update X set A=0 where B=1;
select type_A(...) 
  into   row_type 
  from   dual;
PIPE ROW(row_type);
  return ;
end;

当我运行这个查询时:

选择 * 从 表(测试('123'))

我收到此错误:

ORA-14551:无法在查询中执行 DML 操作

所以很明显a不能在这里添加更新查询,那么如何执行更新呢?

感谢任何帮助。

【问题讨论】:

标签: oracle


【解决方案1】:

尝试添加

pragma autonomous_transaction;

到您的函数并使用动态 SQL 进行更新。

【讨论】:

  • 使用AUTONOMOUS_TRANSACTION意味着即时提交,被回滚的外部事务不会回滚这个“本地”提交。因此,它可能会在更大的场景中产生无法预料的后果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多