Я пытаюсь использовать Bulk all и Forall в базе данных Oracle:
Исходный код из процедуры выглядит следующим образом:
IF NVL(v_mc,0) != 0 THEN
FOR rec IN
(SELECT a.testid,
SUM(pct * NVL(cap,0))/v_mc lead1
BULK COLLECT INTO testids1, testids2
FROM testtable a
WHERE a.id = n_id
AND a.type =n_type
GROUP BY a.testid;
)
LOOP
UPDATE testtable
SET LEAD1 =ROUND(testids2(i),2)
WHERE tid = n_id
AND type = n_type
AND testid =testids1(i);
END LOOP;
END IF;
Так что в операторе select я использую функцию Sum издесь также используется псевдонимы.
Код, который я написал, который использует Bulk collect и Forall, выглядит следующим образом:
PROCEDURE test
IS
TYPE test1Tab IS TABLE OF sh_rpt_temp_peer_wip.test1%TYPE;
TYPE test2Tab IS TABLE OF testtable.lead1%TYPE;
testids1 testidTab; --Error 1 and Error 2
testids2 LeadTab;
BEGIN
IF NVL(v_mc,0) != 0 THEN
SELECT testid,
SUM(pct * NVL(cap,0))/v_mc lead1
BULK COLLECT INTO testids1, testids2
FROM testtable a --Error 3
WHERE a.id = n_id
AND a.type =n_type
GROUP BY a.testid ORDER BY a.testid;
FORALL i IN testids1.FIRST..testids1.LAST
UPDATE testtable
SET LEAD1 =ROUND(testids2(i),2)
WHERE tid = n_id --Error 3
AND type = n_type
AND testid =testids1(i);
END IF;
END;
Но во время процедуры компиляции я получаю несколько ошибок.Я очень плохо знаком с PL / SQL.Пожалуйста, дайте мне знать, если я могу получить вычисленное значение как столбец в Bulk Collect?Я получаю ниже ошибки в процедуре:
- Ошибка 1) PL / SQL: элемент игнорируется
- Ошибка 2) компонент 'LEAD' должен быть объявлен
- Ошибка 3) выражение имеет неправильный тип
Пожалуйста, дайте мне знать, что здесь не так
Спасибо