From f4145f773cc2ed3193ff4fe6bbfab113ab735909 Mon Sep 17 00:00:00 2001 From: Marius Mutu Date: Tue, 9 Sep 2025 23:59:26 +0300 Subject: [PATCH] Implement unified error handling system for PACK_IMPORT_PARTENERI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- api/database-scripts/02_import_parteneri.sql | 65 ++++++++++++++------ 1 file changed, 47 insertions(+), 18 deletions(-) diff --git a/api/database-scripts/02_import_parteneri.sql b/api/database-scripts/02_import_parteneri.sql index 5f52552..b938e01 100644 --- a/api/database-scripts/02_import_parteneri.sql +++ b/api/database-scripts/02_import_parteneri.sql @@ -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;