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

Oracle SQL向对象表插入值时如何正确声明嵌套对象避免报错

嵌套自定义对象插入报错的解决方法

Oracle 中操作自定义OBJECT类型时,不会根据括号的嵌套层级自动匹配对象结构,插入嵌套对象值不能仅靠括号分组,必须显式调用每一层对象类型的构造函数完成值映射。

正确插入语句

对应你定义的三层嵌套对象结构,正确的INSERT写法如下:

INSERT INTO SOLD VALUES (
  SALE(
    PROPERTY(
      ADDRESS('1 MY ROAD', 'MYTOWN', 'MY123'),
      'DESCRIPTION'
    ),
    100000
  )
);

也可以明确指定表字段,写法可读性更高:

INSERT INTO SOLD (house, sale_price)
VALUES (
  PROPERTY(
    ADDRESS('1 MY ROAD', 'MYTOWN', 'MY123'),
    'DESCRIPTION'
  ),
  100000
);

原有写法报错原因

  • 三层括号嵌套写法:Oracle将括号包裹的多值识别为普通表达式分组,不会自动映射为自定义对象实例,值数量、类型解析不匹配时就会抛出「缺失右括号」「值过多」错误
  • 两层括号嵌套写法:相当于给SALE类型传入2个参数,第一个参数是包含4个值的分组表达式,第二个参数是100000,但SALE类型的第一个参数要求为PROPERTY类型,普通分组表达式无法隐式转换为PROPERTY对象,直接触发报错
  • 无括号平铺写法:相当于给SALE类型传入5个入参,但SALE类型的构造函数仅接受house、sale_price2个入参,直接触发值过多错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:48:22