Loops PL/SQL在forall循环中未找到数据错误
我在数组上循环时未发现数据错误。execute immediate有数据,但是forall循环没有给出datafound错误,并且无法迭代集合 请在下面查找代码。代码arr.FIRST似乎有一些问题。表中有数据,执行sql在编辑器中提供数据。你能帮忙吗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
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;
/