Массовый сбор подмножества столбцов из Oracle Cursor - PullRequest
3 голосов
/ 19 ноября 2010

A дана хранимая процедура , которую нельзя изменить.Возвращает курсор с количеством столбцов в результате.Есть ли в Oracle простой способ BULK COLLECT INTO только подмножество столбцов, предоставляемых курсором?

FOR циклов и новых типов коллекций следует избегать.Я не хотел бы получать все данные из курсора, только данные, которые необходимы.

Например, для BULK COLLECTION INTO всех столбцов из курсора будет работать следующее:

FETCH s_cursor BULK COLLECT INTO staff_ids;

Ответы [ 2 ]

2 голосов
/ 19 ноября 2010

Короткий ответ - «нет», вам придется сделать одно из того, что вы сказали, что не хотите делать, если только вы не можете изменить хранимую процедуру или написать новую хранимую процедуру, которая делает то, что выхотят.

1 голос
/ 19 ноября 2010

Вы не можете сразу удалить ненужные столбцы.

Вы можете объявить таблицы 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;

Однако, это больше кода для написания и требует больше времени для выполнения, чем просто массовый сбор всех столбцов изкурсор и делая вид, что ненужных столбцов нет.

...