PL/SQL forall 循环中未发现数据错误

PL/SQL No Data found error on forall loop

我在遍历数组时遇到“找不到数据”错误。立即执行有数据,但 forall 循环没有发现数据错误并且无法迭代集合。

请在下面找到代码。 code_arr.FIRST 似乎有问题。 Table 有数据,执行 sql 会在编辑器上给出数据。能帮忙吗

create or replace PACKAGE TEST AS
  FUNCTION TEST RETURN NUMBER;
 END;


create or replace PACKAGE BODY TEST AS
  FUNCTION TEST RETURN NUMBER
    IS
        TYPE typ_varchar IS TABLE OF VARCHAR2 (1000) INDEX BY BINARY_INTEGER;
        lv_statement   VARCHAR2 (1000);
        code_arr       typ_varchar;
        var1 varchar(1000);
  BEGIN
        lv_statement :=    'SELECT  lnm.code FROM employee lnm';

        EXECUTE IMMEDIATE lv_statement BULK COLLECT
        INTO code_arr;

          FORALL ix1 IN code_arr.FIRST .. code_arr.LAST SAVE EXCEPTIONS
          SELECT code_arr(ix1) into var1 FROM DUAL;

        RETURN 1;
  END;
END;

在此先感谢您的帮助。

马修

FORALL 用于批量 DML 而不是用于循环数据。语法图显示了这一点:

迂腐地说,SELECT DML 的一种形式,尽管它通常被认为与修改对象的命令分开。这可能就是为什么原始代码可以工作但在 运行 时间而不是在编译时抛出错误的原因。

如果您需要做的只是遍历数据,只需像这样使用游标进行循环。 Oracle 自动对这些类型的循环使用批量收集:

begin
    for employees in
    (
        SELECT  lnm.code FROM employee lnm
    ) loop
        --Do something here.
        null;
    end loop;
end;
/