Oracle: Что делает синтаксис TABLE? - PullRequest
0 голосов
/ 01 октября 2018

Я смотрю на скрипт, который имеет следующее:

select * from table (schema.package.function(sysdate))

Я знаком с:

select <row> from <table>

Но я не видел синтаксиса TABLE, использованного ранее.Что это делает?

Любое понимание было бы здорово!

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Это выражение коллекции таблиц :

table_collection_expression позволяет сообщать Oracle, что значение collection_expression должно бытьрассматривается как таблица для целей запроса и операций DML. collection_expression может быть подзапросом, столбцом, функцией или конструктором коллекции.Независимо от формы, он должен возвращать коллекционное значение, то есть значение, тип которого является вложенной таблицей или массивом.Этот процесс извлечения элементов коллекции называется collection unnesting .

Это может быть функция, как сказал @James, когда вы столкнулись с этим в коде в вашем вопросе,но могут быть и другие вещи.Примеры в документации, ссылки на которую приведены выше, показывают, что она применяется, например, к столбцам вложенной таблицы в таблице.И вы можете использовать и удалять свой собственный тип коллекции или встроенный, например:

select *
from table (sys.odcinumberlist(1,2,3,4,5));

Result Sequence
---------------
              1
              2
              3
              4
              5
0 голосов
/ 01 октября 2018

Ключевое слово TABLE сообщает Oracle, что вы выбираете не из стандартной таблицы или представления, а скорее функцию, которая возвращает результаты в виде таблицы.

Результаты функции затем обрабатываются так же, как если бы они были таблицей, что касается остальной части запроса.

Функция должна быть определена определенным образом, чтобы это работало.

https://docs.oracle.com/cd/B19306_01/appdev.102/b14289/dcitblfns.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...