给出 stored procedure 无法更改 . 它返回 a cursor ,结果中包含多个列 . 在Oracle中是否有一种简单的方法 BULK COLLECT INTO 只有光标提供的列子集?
应避免 FOR 循环和新的集合类型 . 我不想从光标中获取所有数据,只需要获取所需的数据 .
例如,对于 BULK COLLECTION INTO ,游标中的所有列都可以使用:
FETCH s_cursor BULK COLLECT INTO staff_ids;
2 回答
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;
2 回答
您不能立即处置不需要的列 .
您可以为游标的每一列声明PL / SQL表,如下所示:
并批量收集到这些表中:
并删除不需要的集合:
但是,这是更多的代码编写并且需要更多的时间来执行,而不仅仅是从光标收集所有列并假装不需要的列不在那里 .
简短的回答是“不”,除非你可以改变存储过程,否则你必须做你不想做的事情之一,或者得到一个新的存储过程来做你想做的事情 .