You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle交叉连接表对象无需Table()函数传播行的原因咨询

Oracle Spatial使用疑问:表集合交叉连接时TABLE()函数非必需的原因

Oracle Spatial提供SDO_UTIL.GETVERTICES函数:

该函数返回MDSYS.VERTEX_SET_TYPE类型对象,本质是由MDSYS.VERTEX_TYPE对象构成的嵌套表集合,类型定义如下:

CREATE TYPE vertex_set_type as TABLE OF vertex_type;

常规开发实践中,GetVertices()一般和TABLE()函数搭配使用:将几何数据表与table(getvertices(shape))做交叉连接,就能为每个几何对象拆分出对应的所有顶点行,示例代码如下:

with cte as (
select sdo_geometry('linestring (10 20, 30 40)')                       shape from dual union all
select sdo_geometry('linestring (50 60, 70 80, 90 100)')               shape from dual union all
select sdo_geometry('linestring (110 120, 130 140, 150 160, 170 180)') shape from dual)
  
select 
    v.*
from 
    cte, table(sdo_util.getvertices(shape)) v

查询返回结果:

X     Y     Z     W    V5    V6    V7    V8    V9   V10   V11    ID
----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
   10    20                                                           1
   30    40                                                           2
   50    60                                                           1
   70    80                                                           2
   90   100                                                           3
  110   120                                                           1
  130   140                                                           2
  150   160                                                           3
  170   180                                                           4

Oracle官方文档给出的示例同样推荐使用TABLE()函数。
但实际测试发现TABLE()函数并不是必需的:把查询里的TABLE()去掉之后,返回的结果和原写法完全一致。


待确认问题

  • 和表类型对象做交叉连接时,为什么不写TABLE()函数也能实现集合拆分为多行的效果?
  • 官方文档明确提示需要使用TABLE()函数,是不是旧版本Oracle强制要求必须加该函数,新版本对语法规则做了调整?

相关参考方向

  • TABLE关键字针对表集合表达式变为可选项的起始版本说明
  • 不使用Table()表达式交叉连接varray的实现方案

内容的提问来源于stack exchange,提问作者User1974

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 19:24:19