Implement unified error handling system for PACK_IMPORT_PARTENERI

- Add g_last_error package variable matching PACK_JSON/PACK_IMPORT_COMENZI pattern
- Implement get_last_error() and clear_error() functions for VFP orchestrator integration
- Replace exceptions with error storage in validation and main functions
- Return -1 on errors instead of raising exceptions for deferred error handling
- Enable orchestrator to read errors before deciding when to log them

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-09-09 23:59:26 +03:00
parent 0b9814114d
commit f4145f773c

View File

@@ -35,6 +35,9 @@ CREATE OR REPLACE PACKAGE PACK_IMPORT_PARTENERI AS
C_MIN_COD_FISCAL CONSTANT NUMBER := 3;
C_CUI_PERS_FIZICA CONSTANT NUMBER := 13; -- CNP are 13 cifre
-- Variabila package pentru ultima eroare (pentru orchestrator VFP)
g_last_error VARCHAR2(4000);
-- ====================================================================
-- CUSTOM EXCEPTIONS
-- ====================================================================
@@ -134,6 +137,20 @@ CREATE OR REPLACE PACKAGE PACK_IMPORT_PARTENERI AS
p_prenume OUT VARCHAR2
);
-- ====================================================================
-- ERROR MANAGEMENT FUNCTIONS (similar cu PACK_JSON)
-- ====================================================================
/**
* Returneaza ultima eroare pentru orchestrator VFP
*/
FUNCTION get_last_error RETURN VARCHAR2;
/**
* Reseteaza eroarea
*/
PROCEDURE clear_error;
END PACK_IMPORT_PARTENERI;
/
@@ -144,6 +161,19 @@ END PACK_IMPORT_PARTENERI;
CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
-- ================================================================
-- ERROR MANAGEMENT FUNCTIONS IMPLEMENTATION
-- ================================================================
FUNCTION get_last_error RETURN VARCHAR2 IS
BEGIN
RETURN g_last_error;
END get_last_error;
PROCEDURE clear_error IS
BEGIN
g_last_error := NULL;
END clear_error;
-- ====================================================================
-- PRIVATE FUNCTIONS
-- ====================================================================
@@ -158,13 +188,15 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
BEGIN
-- Verificari obligatorii
IF p_denumire IS NULL THEN
RAISE_APPLICATION_ERROR(-20001, 'Denumirea partenerului nu poate fi goala');
g_last_error := 'Denumirea partenerului nu poate fi goala';
RETURN FALSE;
END IF;
-- Cod fiscal optional, dar daca exista trebuie sa aiba minim 3 caractere
IF p_cod_fiscal IS NOT NULL AND LENGTH(TRIM(p_cod_fiscal)) > 0 THEN
IF LENGTH(TRIM(p_cod_fiscal)) < C_MIN_COD_FISCAL THEN
RAISE_APPLICATION_ERROR(-20001, 'Codul fiscal trebuie sa aiba minim ' || C_MIN_COD_FISCAL || ' caractere');
g_last_error := 'Codul fiscal trebuie sa aiba minim ' || C_MIN_COD_FISCAL || ' caractere';
RETURN FALSE;
END IF;
END IF;
@@ -172,8 +204,8 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
EXCEPTION
WHEN OTHERS THEN
pINFO('ERROR in valideaza_date_partener: ' || SQLERRM, 'IMPORT_PARTENERI');
RAISE;
g_last_error := 'ERROR in valideaza_date_partener: ' || SQLERRM;
RETURN FALSE;
END valideaza_date_partener;
/**
@@ -500,6 +532,9 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
v_denumire_curata VARCHAR2(200);
BEGIN
-- Resetare eroare la inceputul procesarii
clear_error;
pINFO('=== ÎNCEPUT cauta_sau_creeaza_partener ===', 'IMPORT_PARTENERI');
pINFO('Input: cod_fiscal=' || NVL(p_cod_fiscal, 'NULL') ||
', denumire=' || NVL(p_denumire, 'NULL') ||
@@ -507,7 +542,8 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
-- Validare date input
IF NOT valideaza_date_partener(p_cod_fiscal, p_denumire) THEN
RAISE partener_invalid_exception;
g_last_error := 'Date partener invalide - validare esuata';
RETURN -1;
END IF;
v_cod_fiscal_curat := TRIM(p_cod_fiscal);
@@ -594,15 +630,16 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
END IF;
IF v_id_part IS NULL OR v_id_part <= 0 THEN
RAISE_APPLICATION_ERROR(-20003, 'pack_def.adauga_partener a returnat ID invalid');
g_last_error := 'pack_def.adauga_partener a returnat ID invalid';
RETURN -1;
END IF;
pINFO('Partener creat cu succes. ID_PART=' || v_id_part, 'IMPORT_PARTENERI');
EXCEPTION
WHEN OTHERS THEN
pINFO('ERROR la crearea partenerului prin pack_def: ' || SQLERRM, 'IMPORT_PARTENERI');
RAISE integrare_pack_def_exception;
g_last_error := 'ERROR la crearea partenerului prin pack_def: ' || SQLERRM;
RETURN -1;
END;
-- STEP 4: Adaugare adresa (daca exista)
@@ -662,17 +699,9 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
RETURN v_id_part;
EXCEPTION
WHEN partener_invalid_exception THEN
pINFO('ERROR: Date partener invalide', 'IMPORT_PARTENERI');
RAISE_APPLICATION_ERROR(-20001, 'Date partener invalide: ' || SQLERRM);
WHEN integrare_pack_def_exception THEN
pINFO('ERROR: Problema la integrarea cu pack_def', 'IMPORT_PARTENERI');
RAISE_APPLICATION_ERROR(-20003, 'Eroare la integrarea cu pack_def: ' || SQLERRM);
WHEN OTHERS THEN
pINFO('ERROR NEAȘTEPTAT in cauta_sau_creeaza_partener: ' || SQLERRM, 'IMPORT_PARTENERI');
RAISE_APPLICATION_ERROR(-20099, 'Eroare neasteptata la crearea partenerului: ' || SQLERRM);
g_last_error := 'ERROR NEAȘTEPTAT in cauta_sau_creeaza_partener: ' || SQLERRM;
RETURN -1;
END cauta_sau_creeaza_partener;