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

如何创建包含MDSYS.SDO_GEOMETRY对象的ODCI列表

解答

Oracle本身没有提供可以直接存储MDSYS.SDO_GEOMETRY对象的内置ODCI列表。所有ODCI前缀的内置集合类型都是为Oracle Data Cartridge接口设计的固定类型,只支持预设的特定数据类型,常见内置ODCI列表的适配类型如下:

  • SYS.ODCIVarchar2List:仅支持存储VARCHAR2类型值
  • SYS.ODCINumberList:仅支持存储NUMBER类型值
  • SYS.ODCIDateList:仅支持存储DATE类型值
  • SYS.ODCIObjectList:仅支持存储SYS.ODCIOBJECT类型的实例,不能直接传入其他Schema下的对象类型,这就是之前尝试传入SDO_GEOMETRY时报类型不匹配错误的原因。

实现方法

直接参照ODCI列表的定义逻辑,自定义对应元素类型的嵌套表即可,使用方式和内置ODCI列表完全一致,没有额外学习成本。
第一步先创建集合类型:

-- 创建支持存储SDO_GEOMETRY对象的嵌套表类型
CREATE OR REPLACE TYPE SdoGeometryList AS TABLE OF MDSYS.SDO_GEOMETRY;
/

创建完成后就可以像用ODCIVarchar2List一样直接调用:

SELECT 
    SdoGeometryList(
        sdo_geometry('point(10 20)'),
        sdo_geometry('point(30 40)'),
        sdo_geometry('point(50 60)')
    ) AS my_list
FROM dual;

不要尝试用类型强转的方式把SDO_GEOMETRY塞进ODCIObjectList:ODCIOBJECT是ODCI接口专用的特殊对象类型,强转存储后后续读取、做空间运算都需要额外做反向类型转换,很容易触发隐式转换错误,也不符合集合类型的设计规范。


内容的提问来源于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:01:08