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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 19:07:38