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
相关产品推荐
相关产品推荐

