首页 文章

批量从Oracle Cursor收集列的子集

提问于
浏览
3

给出 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;
    

    并删除不需要的集合:

    t_col2.delete;
    t_col3.delete;
    

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

  • 2

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

相关问题