Files
ROMFASTSQL/oracle/roa/README_ORACLE10G.md
2025-10-06 18:53:45 +03:00

2.2 KiB

Oracle 10g Compatibility

Două versiuni disponibile pentru SCRIE_JC_2007

📄 Fișiere:

  1. scrie_jc_2007.sql - Versiunea PRINCIPALĂ (FORALL)

    • Pentru Oracle 11g, 12c, 18c, 19c, 21c, 23c
    • Folosește FORALL pentru performanță maximă
    • Performanță: ~15-30ms pentru <10k rows
  2. scrie_jc_2007_oracle10g.sql - Versiunea pentru Oracle 10g

    • Pentru Oracle 10.2.0.5 (și versiuni mai vechi)
    • Folosește FOR LOOP pentru compatibilitate
    • Performanță: ~20-50ms pentru <10k rows
    • Rezolvă eroarea PLS-00436

🔧 Când să folosești fiecare versiune:

Versiune Oracle Fișier de folosit Performanță
8i - 10g scrie_jc_2007_oracle10g.sql Bună (20-50ms)
11g - 23c scrie_jc_2007.sql Excelentă (15-30ms)

⚠️ Eroarea pe Oracle 10g (fără fix):

Error: PLS-00436: restrictie de implementare: nu se pot referi campurile din tabelul de inregistrari BULK In-BIND
Line: 1501
Text: FORALL i IN 1..S.COUNT

Cauza: Oracle 10g nu permite S(i).field în FORALL când S este TYPE TABLE OF cursor%ROWTYPE

Soluție: Folosește scrie_jc_2007_oracle10g.sql care înlocuiește FORALL cu FOR LOOP


📊 Diferențe tehnice:

Versiunea FORALL (scrie_jc_2007.sql):

FORALL i IN 1..S.COUNT
  UPDATE JC2007 J SET ... WHERE ...;

FOR i IN 1..S.COUNT LOOP
  IF SQL%BULK_ROWCOUNT(i) = 0 THEN ...

Versiunea FOR LOOP (scrie_jc_2007_oracle10g.sql):

FOR i IN 1..S.COUNT LOOP
  UPDATE JC2007 J SET ... WHERE ...;
  IF SQL%ROWCOUNT = 0 THEN ...
END LOOP;

🚀 Instalare pentru Oracle 10g:

-- 1. Backup versiunea curentă (opțional)
@scrie_jc_2007.sql

-- 2. Instalează versiunea pentru Oracle 10g
@scrie_jc_2007_oracle10g.sql

📝 Note importante:

  • Ambele versiuni sunt mult mai rapide decât MERGE-ul original (60-120s)
  • Ambele versiuni au aceeași logică de business
  • Singura diferență: FORALL vs FOR LOOP
  • Dacă faci upgrade la Oracle 11g+, poți reveni la versiunea FORALL

Creat: 2025-10-06 Autor: Optimizare Oracle compatibility