Oracle Multi Column Subquery с вызовом процедуры - PullRequest
0 голосов
/ 16 мая 2018

У меня интересная проблема с работы.У меня есть процедура Oracle, написанная кем-то еще, которая возвращает набор данных (многостолбцовый, многострочный) для одного входного идентификатора человека.Мне нужно использовать эту процедуру, чтобы получить набор данных для всех идентификаторов людей.

Процедуру можно запросить, приведя вывод в виде таблицы:

"select * from table (package.proc(in_ID))"

Единственный способ, которым я знаю, какзапросить это, чтобы сделать несколько вызовов proc, как это:

select ID,

(select col1 from table(package.proc(persons.ID)) as col1,

(select col2 from table(package.proc(persons.ID)) as col2, --(etc...)

from persons

Однако, для количества строк и столбцов, которые мне нужно получить из этой вещи, это ужасно неэффективно и вызывает тайм-ауты сервера.Кроме того, подвыборы могут получить только одну строку из процедуры, поэтому у меня также есть пропущенные строки (или если он возвращает более одной строки, это приводит к ошибкам в подвыборке).

Есть ли способ сделать это, который не 'т переписать процедуру, чтобы вернуть данные для всех идентификаторов человека?

1 Ответ

0 голосов
/ 16 мая 2018

Начиная с Oracle 12c, вы можете использовать CROSS/OUTER APPLY:

SELECT * 
FROM persons p
OUTER APPLY(TABLE(package.proc(p.ID))) s;
...