提供无法更改的存储过程。它返回一个光标,结果中包含多个列。在Oracle中有一种简单的方法BULK COLLECT INTO
只有光标提供的列子集吗?
FOR
个循环和新的集合类型。我不想从光标中获取所有数据,只需要获取所需的数据。
例如,BULK COLLECTION INTO
光标中的所有列都可以使用以下内容:
FETCH s_cursor BULK COLLECT INTO staff_ids;
答案 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;
但是,这是更多的代码编写,并且需要更多的时间来执行,而不仅仅是从光标收集所有列并假装不需要的列不存在。