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;
END IF;
-- BULK UPDATE all rows at once using FORALL
FORALL i IN 1 .. S.COUNT
-- UPDATE all rows using FOR loop (Oracle 10g compatible)
FOR i IN 1 .. S.COUNT LOOP
UPDATE JC2007 J
SET J.TOTCTVA = J.TOTCTVA + (CASE
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 NVL(J.ID_SUCURSALA, -99) = NVL(S(i).ID_SUCURSALA, -99);
-- Populate SI and SD collections for INSERT and DELETE
FOR i IN 1 .. S.COUNT LOOP
IF SQL%BULK_ROWCOUNT(i) = 0 THEN
-- Check result of UPDATE and populate SI/SD collections
IF SQL%ROWCOUNT = 0 THEN
-- No row was updated -> need to INSERT
SI.EXTEND;
SI(SI.COUNT) := S(i);
@@ -5919,9 +5918,9 @@ CREATE OR REPLACE PACKAGE BODY "PACK_CONTAFIN" is
END IF;
END LOOP;
-- BULK INSERT for new rows
-- INSERT for new rows (Oracle 10g compatible)
IF SI.COUNT > 0 THEN
FORALL i IN 1 .. SI.COUNT
FOR i IN 1 .. SI.COUNT LOOP
INSERT INTO JC2007
(AN,
LUNA,
@@ -6300,12 +6299,13 @@ CREATE OR REPLACE PACKAGE BODY "PACK_CONTAFIN" is
SI(i).RORTD9,
SI(i).RORTD5,
SI(i).ID_SUCURSALA);
END LOOP;
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
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
WHERE J.AN = SD(i).AN
AND J.LUNA = SD(i).LUNA
@@ -6446,6 +6446,7 @@ CREATE OR REPLACE PACKAGE BODY "PACK_CONTAFIN" is
AND J.ROTN = 0
AND J.ROTN50 = 0
AND J.ROTN100 = 0;
END LOOP;
END IF;
END;