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

如何从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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:18:05