批量从Oracle Cursor收集列的子集

时间:2010-11-19 10:44:29

标签: oracle collections plsql cursor

提供无法更改的存储过程。它返回一个光标,结果中包含多个列。在Oracle中有一种简单的方法BULK COLLECT INTO只有光标提供的列子集吗?

应避免使用

FOR个循环和新的集合类型。我不想从光标中获取所有数据,只需要获取所需的数据。

例如,BULK COLLECTION INTO光标中的所有列都可以使用以下内容:

FETCH s_cursor BULK COLLECT INTO staff_ids;

2 个答案:

答案 0 :(得分:2)

简短的回答是“不”,除非你可以更改存储过程,否则你必须做你不想做的事情之一,或者写一个新的存储过程来写你做的事情想。

答案 1 :(得分:1)

您无法立即处理不需要的列。

您可以为游标的每一列声明PL / SQL表,如下所示:

type c_col1 is table of s_cursor.col1%type index by pls_integer;
type c_col2 is table of s_cursor.col2%type index by pls_integer;
type c_col3 is table of s_cursor.col3%type index by pls_integer;
t_col1 c_col1;
t_col2 c_col2;
t_col3 c_col3;

并批量收集到这些表中:

fetch s_cursor bulk collect into t_col1, t_col2, t_col3;

并删除不需要的馆藏:

t_col2.delete;
t_col3.delete;

但是,这是更多的代码编写,并且需要更多的时间来执行,而不仅仅是从光标收集所有列并假装不需要的列不存在。