过程中集合返回游标的问题

[复制链接]
查看11 | 回复9 | 2010-3-1 11:20:05 | 显示全部楼层 |阅读模式
本帖最后由 yjdfff 于 2012-12-12 11:32 编辑
一个存储过程,需要返回一个游标,过程中参数是这样定义的p_test(xxx number,p_ref OUT Sys_Refcursor)过程中进行一些运算后,将结果放到一个嵌套表中,嵌套表定义是这样的
TYPE rec_test IS RECORD(dt NUMBER,col VARCHAR2(1),col1VARCHAR2(1));
TYPE type_test_rec IS TABLE OF rec_test;
type_test type_test_rec:=type_test_rec();
问题是我如何将集合type_test的值赋给p_ref呢,以便外面可以调用.


回复

使用道具 举报

千问 | 2010-3-1 11:20:05 | 显示全部楼层
自己顶一下。
回复

使用道具 举报

千问 | 2010-3-1 11:20:05 | 显示全部楼层
使用open p_ref for ..........即可, 如果用集合的话, 那就直接把数据批量即可, 没有必要用游标了, 具体看文档即可!
回复

使用道具 举报

千问 | 2010-3-1 11:20:05 | 显示全部楼层
bell6248 发表于 2012-12-12 13:34
使用open p_ref for ..........即可, 如果用集合的话, 那就直接把数据批量即可, 没有必要用游标了, 具体 ...

open p_ref for type_test;
这样是不可以的呀
回复

使用道具 举报

千问 | 2010-3-1 11:20:05 | 显示全部楼层
open for 的方式后面只能跟查询吧select * from xxx 但我是集合
回复

使用道具 举报

千问 | 2010-3-1 11:20:05 | 显示全部楼层
首先你的嵌套表类型必须通过create type..声明,
然后代码这么写:
OPEN cur FOR SELECT * FROM TABLE(CAST(type_test AS type_test_rec));
最后返回cur

回复

使用道具 举报

千问 | 2010-3-1 11:20:05 | 显示全部楼层
yjdfff 发表于 2012-12-12 14:03
open for 的方式后面只能跟查询吧select * from xxx 但我是集合

。。。转换一下嘛open for select * from table(type_test)
回复

使用道具 举报

千问 | 2010-3-1 11:20:05 | 显示全部楼层
但你返回的out参数是游标啊,你自己都没统一
回复

使用道具 举报

千问 | 2010-3-1 11:20:05 | 显示全部楼层
hudingchen 发表于 2012-12-12 14:30
首先你的嵌套表类型必须通过create type..声明,
然后代码这么写:
OPEN cur FOR SELECT * FROM TABLE(CAS ...

我新建了一个,使用的这create type 的方式
CREATE TYPE tab_type_test AS OBJECT(
dt number,
col VARCHAR2(1),
col1VARCHAR2(1));
CREATE TYPE tab_type IS TABLE OF tab_type_test;
tab_type1 tab_type:=tab_type();
现在我要将以前的集合(通过type定义的type_test)赋值给tab_type如何赋呢,如下直接赋值不行;
tab_type1 := type_test;
回复

使用道具 举报

千问 | 2010-3-1 11:20:05 | 显示全部楼层
yjdfff 发表于 2012-12-12 14:41
我新建了一个,使用的这create type 的方式
CREATE TYPE tab_type_test AS OBJECT(
dt number,

你这么弄,就得循环了
for i in type_test.first .. type_test.last loop
tab_type1.extend();
tab_type1(dt).dt = type_test(i).dt;
end loop;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行