Oracle SQL查询FROM子句中TABLE关键字的含义是什么?
Oracle SQL中FROM子句TABLE关键字的作用
你提供的SQL代码如下:
FROM index_policy e, TABLE (policies) p, TABLE (p.plan_indexes) i WHERE i.default_strategy IS NOT NULL ORDER BY e.extract_id DESC, e.cycle_date DESC, contract_number, acc_code;
代码中用到的TABLE是Oracle的集合类型转换运算符,核心作用是将集合类型的值(嵌套表、VARRAY、嵌套集合字段等)转换为可以直接查询的二维行集,这样就能把集合里的多值数据放到FROM子句中,和普通数据表做关联查询。
具体到这段代码的逻辑:
policies是一个集合类型的变量/字段,TABLE(policies) p会把集合里的每一个元素拆成单独的行,别名定为p,后续可以直接查询p的对应字段p.plan_indexes是p对应行里存储的集合类型字段,TABLE(p.plan_indexes) i是做嵌套展开:把每一行p对应的plan_indexes集合再拆成多行,别名定为i- 整个FROM子句实际是完成了三个数据源的关联:普通表index_policy、展开后的policies行集、展开后的plan_indexes行集,最后过滤i里default_strategy非空的数据后做排序输出。
补充说明:这种写法是Oracle对象关系特性的标准用法,用来处理存储在列/变量中的多值集合数据,在12c及以上版本中也可以用CROSS APPLY/OUTER APPLY实现等价效果,TABLE是更早版本就支持的兼容写法。
内容的提问来源于stack exchange,提问作者user2801881
相关产品推荐
相关产品推荐

