Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops PL/SQL在forall循环中未找到数据错误_Loops_Plsql_Forall - Fatal编程技术网

Loops PL/SQL在forall循环中未找到数据错误

Loops PL/SQL在forall循环中未找到数据错误,loops,plsql,forall,Loops,Plsql,Forall,我在数组上循环时未发现数据错误。execute immediate有数据,但是forall循环没有给出datafound错误,并且无法迭代集合 请在下面查找代码。代码arr.FIRST似乎有一些问题。表中有数据,执行sql在编辑器中提供数据。你能帮忙吗 create or replace PACKAGE TEST AS FUNCTION TEST RETURN NUMBER; END; create or replace PACKAGE BODY TEST AS FUNCTION

我在数组上循环时未发现数据错误。execute immediate有数据,但是forall循环没有给出datafound错误,并且无法迭代集合

请在下面查找代码。代码arr.FIRST似乎有一些问题。表中有数据,执行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;
提前感谢你的帮助


Mathew

FORALL
用于批量DML,而不是用于数据循环。语法图显示了以下内容:

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

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

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