PL/SQL关联数组元素无法删除问题咨询
问题:PL/SQL关联数组删除元素无效的原因
以下是执行的PL/SQL代码:
declare type as_array is table of varchar2(20) index by pls_integer; v_fname_array as_array; idx integer; begin for x in 100..105 loop select FIRST_NAME into v_fname_array(x) from EMPLOYEES where EMPLOYEE_ID = x; end loop; v_fname_array.delete(2, 5); idx := v_fname_array.FIRST; while idx is not null loop DBMS_OUTPUT.PUT_LINE(v_fname_array(idx)); idx := v_fname_array.NEXT(idx); end loop; end;
执行删除操作后,输出仍为全部6个员工姓名:
Steven Neena Lex Alexander Bruce David
且删除前后数组的count值始终为6,请问为何无法删除指定元素?
原因分析与解决方法
问题核心在于关联数组的索引匹配错误:
- 你通过
for x in 100..105循环向数组中存入元素,此时数组的索引是100、101、102、103、104、105,而非从1开始的连续整数。 - 你调用
v_fname_array.delete(2, 5)是尝试删除索引范围2到5的元素,但数组中根本不存在这些索引的元素,所以删除操作没有任何效果,数组元素数量和输出自然保持不变。
要实现删除指定元素的需求,只需将删除语句的索引范围改为实际存在的索引值即可,比如要删除原输出中从第三个到第六个元素(对应索引102到105),修改后的代码片段如下:
-- 替换原删除语句 v_fname_array.delete(102, 105);
执行修改后的代码,输出将只剩Steven和Neena,数组count值会变为2。
内容的提问来源于stack exchange,提问作者Guna Nikunj
相关产品推荐
相关产品推荐

