PL/SQL关联数组能否不删改元素直接修改现有元素的下标值?
能否修改PL/SQL关联数组中现有元素的下标/索引值?
很遗憾,在PL/SQL里你不能直接修改关联数组(索引表)中现有元素的下标。
关联数组的下标本质是元素的唯一键值,一旦元素通过某个下标被创建,这个键就和元素值绑定死了——PL/SQL没有提供直接修改已有元素下标的语法,你没办法像更新变量值那样“重命名”这个索引。
拿你给出的代码举例:
declare type a_arr is table of varchar2(20) index by pls_integer; tb1 a_arr; begin tb1(1) := 'aaaa'; tb1(2) := 'bbbb'; tb1(3) := 'cccc'; end; /
这里的tb1(1)的下标1是这个元素的唯一标识,没有办法直接把它改成10而保留原元素值。
不过,你可以通过间接的方式实现类似的效果,步骤是:取出原下标对应的值 → 删除原下标元素 → 用新下标存入值。示例代码如下:
declare type a_arr is table of varchar2(20) index by pls_integer; tb1 a_arr; temp_val varchar2(20); begin tb1(1) := 'aaaa'; tb1(2) := 'bbbb'; tb1(3) := 'cccc'; -- 实现将tb1(1)的下标改为10的操作 temp_val := tb1(1); -- 先取出原元素的值 tb1.delete(1); -- 删除原下标对应的元素 tb1(10) := temp_val;-- 用新下标存入原来的值 -- 验证结果 dbms_output.put_line('tb1(10) 的值: ' || tb1(10)); -- 会输出 'aaaa' end; /
这种方式本质上是创建了一个新元素、删除了旧元素,但最终能达到你想要的“将原1下标对应的值转移到10下标”的效果。这也是目前PL/SQL里实现类似需求的标准做法。
内容的提问来源于stack exchange,提问作者Mano
相关产品推荐
相关产品推荐

