【发布时间】:2015-11-28 22:24:40
【问题描述】:
我有以下plsql语句:
DECLARE
VPERIODID VARCHAR2 (10);
vPROCSESSID NUMBER;
VAUDITORID NUMBER;
CURSOR c
IS
SELECT *
FROM view_cost_noabc
WHERE OAUDITORID = 477 AND FL <> 'Ο' AND yearid < 2015
ORDER BY ID;
TYPE nt_type IS TABLE OF c%ROWTYPE;
l_arr nt_type;
TYPE vPREVPERIODVALUE IS TABLE OF NUMBER;
vprev vPREVPERIODVALUE;
dml_errors EXCEPTION;
BEGIN
SELECT fn_periodcurrent INTO vPERIODID FROM DUAL;
SELECT fn_processcurrent INTO vPROCSESSID FROM DUAL;
OPEN c;
LOOP
FETCH c
BULK COLLECT INTO l_arr
LIMIT 500;
EXIT WHEN l_arr.COUNT = 0;
BEGIN
FOR r IN 1 .. l_arr.COUNT
LOOP
vprev (r).vPREVPERIODVALUE :=
'SELECT NVL (SUM (CURRPERIODVALUE), 0)
FROM LIQUIDATIONSDETAILS
WHERE APPOINTOFCAID = l_arr (r).ID
AND PROCESSID < vPROCSESSID
AND SUBSTR (PROCESSID, 5, 2) = 12
AND AUDITORID = 477';
END LOOP;
FORALL i IN 1 .. l_arr.COUNT
INSERT INTO liquidationsdetails (....)
VALUES (...);
EXCEPTION
WHEN DML_ERRORS
THEN
NULL;
END;
EXIT WHEN c%NOTFOUND;
END LOOP;
CLOSE C;
COMMIT;
END;
我想在 oracle 批量 forall 收集循环中使用 select 语句将结果设置为数组变量。 在上面的代码中,我收到 [Error] Execution (60: 42): PLS-00487: Invalid reference to variable 'NUMBER' PL/SQL: Statement denied.
如果可能的话,我更喜欢在 forall 循环中使用 SELECT SUM () 语句。
有什么想法吗?
【问题讨论】:
-
使用 into 子句而不使用 '=' 符号。
-
您确定将一个 constant 字符串插入到变量中最多 500 次吗?
-
Tarun 我也改变了使用 into 子句:SELECT NVL (SUM (CURRPERIODVALUE), 0) INTO vprev (r).vPREVPERIODVALUE FROM LIQUIDATIONSDETAILS WHERE APPOINTOFCAID = l_arr (r).ID AND PROCESSID
-
Wernfried 我需要将选择结果插入字符串数组