如何从Oracle自定义对象类型表中获取对应对象的字段名称列表
Oracle自定义对象表字段内省实现方案
你可以直接通过Oracle内置的数据字典视图直接查询到自定义对象的属性列表,不需要额外工具或复杂逻辑,具体实现如下:
核心实现代码
直接修改你的匿名块为以下内容即可得到目标字段数组:
DECLARE L_items_tbl ITEM_TBL; -- 用于存储返回的字段名集合,类型可根据你的需求替换为自定义数组类型 L_field_arr SYS.ODCIVARCHAR2LIST := SYS.ODCIVARCHAR2LIST(); BEGIN ITEMS_PACKAGE.RETRIEVE_ITEMS(O_items_tbl => L_items_tbl); -- 内省查询字段名 SELECT attr_name BULK COLLECT INTO L_field_arr FROM USER_TYPE_ATTRS WHERE type_name = ( -- 关联查询表类型对应的基对象类型名 SELECT elem_type_name FROM USER_COLL_TYPES WHERE type_name = 'ITEM_TBL' ) ORDER BY attr_no; -- 验证输出(可选) -- FOR idx IN 1..L_field_arr.COUNT LOOP -- DBMS_OUTPUT.PUT_LINE(L_field_arr(idx)); -- END LOOP; END; /
执行后L_field_arr就是你需要的['name', 'type']格式的字段数组。
补充说明
- 你给出的
ITEM_OBJ定义里有笔误,type VRCHAR2(6)需要修正为type VARCHAR2(6)才能正常创建类型。 - 如果类型不属于当前操作的用户,将
USER_TYPE_ATTRS和USER_COLL_TYPES替换为ALL_TYPE_ATTRS和ALL_COLL_TYPES,同时增加OWNER = '类型所属用户名'的过滤条件即可。 attr_no是Oracle内置的属性顺序标识,按其排序得到的字段顺序和你定义对象时的顺序完全一致。
内容的提问来源于stack exchange,提问作者Joao Pereira
相关产品推荐
相关产品推荐

