我正在查看具有以下内容的脚本:
select * from table (schema.package.function(sysdate))
我熟悉:
select <row> from <table>
但是我之前没有看到TABLE实际使用的语法。它是做什么的?
任何见识都会很棒!
答案 0 :(得分:3)
TABLE关键字告诉Oracle,您不是从标准表或视图中进行选择,而是从表等结构中返回结果的函数。
然后,就查询的其余部分而言,将函数的结果视为表一样对待它们。
必须以特定的方式定义此功能才能起作用。
https://docs.oracle.com/cd/B19306_01/appdev.102/b14289/dcitblfns.htm
答案 1 :(得分:3)
它是a table collection expression:
table_collection_expression 可让您通知Oracle,出于查询和DML操作的目的,应将 collection_expression 的值视为表。 collection_expression 可以是子查询,列,函数或集合构造函数。无论其形式如何,它都必须返回一个集合值-即其类型为嵌套表或varray的值。提取集合元素的过程称为 unnesting集合。
它可能是一个函数,就像@James在问题代码中遇到的那样,但也可以是其他函数。例如,链接到上面的文档中的示例显示了将其应用于表中的嵌套表列的情况。您可以使用和取消嵌套自己的收藏集类型,也可以使用内置的收藏集类型,例如:
select *
from table (sys.odcinumberlist(1,2,3,4,5));
Result Sequence
---------------
1
2
3
4
5