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

Oracle PL/SQL中如何访问嵌套TABLE类型内RECORD中的值

Oracle PL/SQL中嵌套TABLE OF TABLE OF RECORD结构的字段访问方法

你提供的示例代码存在几个关键问题,导致无法正确访问最内层RECORD的字段,下面是修正方案和核心要点:

核心问题分析

  1. 未声明变量实例:A和A_DET只是自定义类型,不是可操作的变量,不能直接用a.first或a_det.first调用集合方法
  2. 访问语法错误:不能用类型名a_det去访问外层集合元素的内层表,必须通过外层变量的索引定位到内层表实例后,再用内层索引访问记录字段

修正后的完整代码

DECLARE
    -- 定义最内层记录类型
    TYPE a_rec IS RECORD (
        name   VARCHAR2(100),
        adress VARCHAR2(100)
    );
    -- 定义记录类型的嵌套表
    TYPE A_DET IS TABLE OF A_REC;
    -- 定义嵌套表的嵌套表(外层表)
    TYPE A IS TABLE OF A_DET;

    -- 声明外层表变量并初始化数据
    v_a A := A(
        A_DET(
            a_rec(name => '张三', adress => '北京'),
            a_rec(name => '李四', adress => '上海')
        ),
        A_DET(
            a_rec(name => '王五', adress => '广州')
        )
    );
BEGIN
    -- 遍历外层表的每个元素(每个元素是一个A_DET类型的嵌套表)
    FOR i IN v_a.first .. v_a.last LOOP
        -- 遍历当前外层元素对应的内层表
        FOR j IN v_a(i).first .. v_a(i).last LOOP
            -- 正确访问最内层记录的name字段
            dbms_output.put_line('第' || i || '组第' || j || '条记录:' || v_a(i)(j).name);
        END LOOP;
    END LOOP;
END;
/

关键访问规则

  • 外层表变量v_a通过索引i定位到一个内层表实例:v_a(i)
  • 再通过内层索引j定位到最内层的记录:v_a(i)(j)
  • 最后直接访问记录的字段:v_a(i)(j).name 或 v_a(i)(j).adress

额外注意事项

  • PL/SQL嵌套表默认是空集合,必须先初始化并填充数据才能遍历,否则会抛出NO_DATA_FOUND异常
  • 如果需要动态添加元素,可以使用EXTEND方法,比如v_a.EXTEND; v_a(v_a.last) := A_DET();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:24:55