我做了一个返回collection的函数,函数的前半部分使用临时表对数据进行一些处理,后半部分从临时表里获取数据。但使用sql语句查询函数的结果时说select语句中不能包含dml操作。我根据网上的一些资料加了一个自治事务,运行的时候提示ORA-06519: 检测到活动的独立的事务处理, 已经回退。下面是函数的部分代码,大家看看有问题吗?在函数里使用临时表应该怎么写?先谢谢了!create or replace function FRptstoresalesum
(
  p_store IN VARCHAR2 DEFAULT NULL ,
  p_style IN VARCHAR2 DEFAULT NULL ,
  p_datebeg IN date DEFAULT NULL ,
  p_dateend IN date DEFAULT NULL   
)return storesalesum_tbl
--storesalesum_tbl是collection类型
is
  PRAGMA AUTONOMOUS_TRANSACTION;
  --其它声明...
begin
  delete from tt_rptstoresum;
   --对临时表的操作...  open c_sale;
  --从临时表读取数据
  return result;
  
end;

解决方案 »

  1.   

    函数里想执行DML语句,要用动态SQL
    但这样的话,函数就不能用SELECT的方式来执行,要用执行存储过程的方式了其实你临时表的结构固定的话,就事先建好就行了
      

  2.   

    临时表中的数据在不同事务间是独立的,用自治事务打开一个新的事务,不能访问先前事务中临时表的数据
    可以改成过程
    将c_sale定义成传出参数