如何使用关联数组_Index-By Table集合类型定义与遍历

张开发
2026/4/20 1:06:20 15 分钟阅读

分享文章

如何使用关联数组_Index-By Table集合类型定义与遍历
INDEX BY TABLE必须声明为TYPE ... IS TABLE OF ... INDEX BY PLS_INTEGER或VARCHAR2(n)不可用NUMBER键仅支持标量类型遍历时须用NEXT/PRIOR避免空洞仅存于PL/SQL内存不持久化区分大小写且不裁剪空格。PL/SQL 里 INDEX BY TABLE 怎么声明才不报错直接用 type ... is table of ... index by ...别漏掉 index by 后面的索引类型。常见错误是写成 index by number错必须是 index by pls_integer 或 index by binary_integer二者等价oracle 不接受裸 number 作索引类型。声明时注意键类型只能是标量PLS_INTEGER、VARCHAR2不能是 DATE 或自定义类型值类型可以是任意 PL/SQL 类型包括记录或嵌套表。TYPE emp_list_t IS TABLE OF employees%ROWTYPE INDEX BY PLS_INTEGER;TYPE name_map_t IS TABLE OF VARCHAR2(100) INDEX BY VARCHAR2(30);如果用 VARCHAR2 做键声明时必须指定长度如 VARCHAR2(30)否则编译失败遍历 INDEX BY TABLE 为什么 FOR i IN t.FIRST..t.LAST 会跳空洞因为 INDEX BY TABLE 是稀疏集合FIRST 到 LAST 范围内可能有大量未赋值的下标直接用 FOR 循环会访问到空元素触发 NO_DATA_FOUND 或 VALUE_ERROR 异常。正确做法永远用 NEXT/PRIOR 迭代器——从 FIRST 开始每次调用 NEXT 跳到下一个存在元素的下标。idx : t.FIRST;WHILE idx IS NOT NULL LOOP??DBMS_OUTPUT.PUT_LINE(t(idx));??idx : t.NEXT(idx);END LOOP;用 EXISTS(idx) 判断再取值也行但多一次查表开销NEXT 是原子操作更安全高效。INDEX BY TABLE 和嵌套表、VARRAY 的关键区别在哪最实际的区别就三点生命周期、存储位置、是否可为空。 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手依托大模型帮助用户记录、整理和分析音视频内容体验用大模型做音视频笔记、整理会议记录。

更多文章