如何在SQL中获取对象类型属性?遇ORA-904错误求助
解决Oracle对象类型列查询的ORA-904错误
你碰到的ORA-904(标识符无效)错误,根源是查询对象类型列的属性时用错了语法。当表中包含自定义对象类型的列时,直接写my_food.name这种写法Oracle没法正确解析,必须通过表名或表别名来明确限定对象列。
正确的查询方式
下面几种写法都能正常获取食物名称:
- 使用表别名(推荐,代码更简洁易读)
SELECT ft.my_food.name AS food_name FROM food_table ft;
- 直接用表名限定
如果不想用别名,直接通过表名来限定对象列也可以:
SELECT food_table.my_food.name AS food_name FROM food_table;
- 用VALUE函数访问对象实例
VALUE函数可以返回行中的完整对象实例,再通过点符号访问属性:
SELECT VALUE(ft).name AS food_name FROM food_table ft;
查询多个对象属性的示例
如果需要一次性查询所有对象属性和表的其他列,参考这个写法:
SELECT ft.id, ft.my_food.name AS food_name, ft.my_food.food_group AS food_group, ft.my_food.grown_in AS grown_location FROM food_table ft;
额外提示:更新对象属性的正确语法
之后如果要更新对象列的某个属性,也要遵循同样的限定规则,比如:
UPDATE food_table ft SET ft.my_food.grown_in = 'Northern India' WHERE ft.id = 1;
内容的提问来源于stack exchange,提问作者Steven Feuerstein
相关产品推荐
相关产品推荐

