Oracle: Что делает синтаксис TABLE?

Я смотрю на сценарий, в котором есть следующее:

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

Я знаком с:

select <row> from <table>

Но я не видел, чтобы синтаксис TABLE действительно использовался раньше. Что оно делает?

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

Он распознает функции с табличным значением.

Gordon Linoff 01.10.2018 17:22
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
1
49
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

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

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

Теперь это имеет смысл, спасибо! Также спасибо за ссылку, прочитаю.

J. D. 01.10.2018 18:29

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

The table_collection_expression lets you inform Oracle that the value of collection_expression should be treated as a table for purposes of query and DML operations. The collection_expression can be a subquery, a column, a function, or a collection constructor. Regardless of its form, it must return a collection value—that is, a value whose type is nested table or varray. This process of extracting the elements of a collection is called collection unnesting.

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

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

Result Sequence
---------------
              1
              2
              3
              4
              5

Другие вопросы по теме