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;
/
我在遍历数组时遇到“找不到数据”错误。立即执行有数据,但 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;
/