oracle中TABLE子句的功能

functionality of the TABLE clause in oracle

根据 oracle 文档,我很难理解 TABLE 子句的作用:

it transforms a collection like a nested table into a table which could be used in an sql statement.

这看起来很清楚,但我不知道它在实践中是如何工作的。

这些是相关类型和 tables;

create type movies_type as Table of ref movie_type;

create type actor_type under person_type

(

starring movies_type

) Final;

create table actor of actor_type

NESTED TABLE starring STORE AS starring_nt;

我想列出他们主演的演员和电影,这个有效

select firstname, lastname, value(b).title

from actor2 a, table(a.starring) b;

但我不明白为什么。为什么不是这个

actor2 a, table(a.starring) b

笛卡尔积?

此外,为什么 value(b) 在这里起作用?因为它是 table 个 refs,它应该是 deref,但那不起作用。

我的问题是:

为什么这个查询按预期工作?我希望它列出每个演员和每部电影(笛卡尔积),因为没有关于如何加入的特定条件,为什么 value(b) 在这里工作?,因为它是 table 的参考文献,它应该是deref,但这不起作用。

我没有 oracle 的心智模型 sql,非常感谢有关如何正确学习的帮助。

非常感谢。

它不是笛卡尔积,因为 table(a.starring)a 相关:对于 a 中的每一行,它是 运行 table 与其对应的函数starring 嵌套 table.

这不是 Oracle 中非常常见的数据建模方式,通常您会使用联结 table 来允许正确规范化的模型(这通常更容易查询并允许更好的性能)