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:
@@ -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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user