Fix Oracle 10g compatibility in PACK_CONTAFIN SCRIE_JC_2007 procedure

Replace FORALL bulk operations with FOR loops to avoid PLS-00436 error
on Oracle 10.2.0.5. The older Oracle version does not support referencing
record fields from collection in FORALL statements.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Marius
2026-01-15 13:06:17 +02:00
parent a96b9b8d8b
commit 1da4c2347c

View File

@@ -5662,8 +5662,8 @@ CREATE OR REPLACE PACKAGE BODY "PACK_CONTAFIN" is
RETURN; RETURN;
END IF; END IF;
-- BULK UPDATE all rows at once using FORALL -- UPDATE all rows using FOR loop (Oracle 10g compatible)
FORALL i IN 1 .. S.COUNT FOR i IN 1 .. S.COUNT LOOP
UPDATE JC2007 J UPDATE JC2007 J
SET J.TOTCTVA = J.TOTCTVA + (CASE SET J.TOTCTVA = J.TOTCTVA + (CASE
WHEN EXTRACT(MONTH FROM J.DATAACT) = J.LUNA AND WHEN EXTRACT(MONTH FROM J.DATAACT) = J.LUNA AND
@@ -5906,9 +5906,8 @@ CREATE OR REPLACE PACKAGE BODY "PACK_CONTAFIN" is
AND J.ID_FACT = S(i).ID_FACT AND J.ID_FACT = S(i).ID_FACT
AND NVL(J.ID_SUCURSALA, -99) = NVL(S(i).ID_SUCURSALA, -99); AND NVL(J.ID_SUCURSALA, -99) = NVL(S(i).ID_SUCURSALA, -99);
-- Populate SI and SD collections for INSERT and DELETE -- Check result of UPDATE and populate SI/SD collections
FOR i IN 1 .. S.COUNT LOOP IF SQL%ROWCOUNT = 0 THEN
IF SQL%BULK_ROWCOUNT(i) = 0 THEN
-- No row was updated -> need to INSERT -- No row was updated -> need to INSERT
SI.EXTEND; SI.EXTEND;
SI(SI.COUNT) := S(i); SI(SI.COUNT) := S(i);
@@ -5919,9 +5918,9 @@ CREATE OR REPLACE PACKAGE BODY "PACK_CONTAFIN" is
END IF; END IF;
END LOOP; END LOOP;
-- BULK INSERT for new rows -- INSERT for new rows (Oracle 10g compatible)
IF SI.COUNT > 0 THEN IF SI.COUNT > 0 THEN
FORALL i IN 1 .. SI.COUNT FOR i IN 1 .. SI.COUNT LOOP
INSERT INTO JC2007 INSERT INTO JC2007
(AN, (AN,
LUNA, LUNA,
@@ -6300,12 +6299,13 @@ CREATE OR REPLACE PACKAGE BODY "PACK_CONTAFIN" is
SI(i).RORTD9, SI(i).RORTD9,
SI(i).RORTD5, SI(i).RORTD5,
SI(i).ID_SUCURSALA); SI(i).ID_SUCURSALA);
END LOOP;
END IF; END IF;
-- BULK DELETE for rows where all values became 0 after UPDATE -- DELETE for rows where all values became 0 after UPDATE (Oracle 10g compatible)
-- Only executed when tnScrie = nStergere -- Only executed when tnScrie = nStergere
IF SD.COUNT > 0 AND tnScrie = pack_contafin.nStergere THEN IF SD.COUNT > 0 AND tnScrie = pack_contafin.nStergere THEN
FORALL i IN 1 .. SD.COUNT FOR i IN 1 .. SD.COUNT LOOP
DELETE FROM JC2007 J DELETE FROM JC2007 J
WHERE J.AN = SD(i).AN WHERE J.AN = SD(i).AN
AND J.LUNA = SD(i).LUNA AND J.LUNA = SD(i).LUNA
@@ -6446,6 +6446,7 @@ CREATE OR REPLACE PACKAGE BODY "PACK_CONTAFIN" is
AND J.ROTN = 0 AND J.ROTN = 0
AND J.ROTN50 = 0 AND J.ROTN50 = 0
AND J.ROTN100 = 0; AND J.ROTN100 = 0;
END LOOP;
END IF; END IF;
END; END;