怎样在函数里面使用临时表?

bucherren 2009-11-04 11:57:10
我做了一个返回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;
...全文
274 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangwonderful 2009-11-04
  • 打赏
  • 举报
回复
同意2楼的说法
小灰狼W 2009-11-04
  • 打赏
  • 举报
回复
临时表中的数据在不同事务间是独立的,用自治事务打开一个新的事务,不能访问先前事务中临时表的数据
可以改成过程
将c_sale定义成传出参数
hebo2005 2009-11-04
  • 打赏
  • 举报
回复
函数里想执行DML语句,要用动态SQL
但这样的话,函数就不能用SELECT的方式来执行,要用执行存储过程的方式了

其实你临时表的结构固定的话,就事先建好就行了
inthirties 2009-11-04
  • 打赏
  • 举报
回复
你用自治事务,就要自己提交数据和回滚事务。

或者不要声明为自治事务。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧