Sie suchen dann nach Workarounds und manipulieren dann oft den :system.message_level:
KEY-COMMIT - Trigger auf Form-Ebene (Quick + Dirty)
BEGIN :System.Message_Level := 25; COMMIT; :System.Message_Level := 5; END;
oder speichern ihn zwischen:
DECLARE V_Message_Level NUMBER; BEGIN V_Message_Level := :System.Message_Level; :System.Message_Level := 25; COMMIT; :System.Message_Level := V_Message_Level; END;
Das sind keine Best Practices. Diesen Code müsste man in hunderten Prozeduren unterbringen.
Fehler und Meldungen filtern ist die Lösung für ein gutes Message-Handling. Diese Prozedur zeigt die Technik:
ON-ERROR - Trigger auf Form-Ebene
DECLARE V_Error_Code NUMBER; V_Error_Text VARCHAR2 (2000); V_DBMS_Error_Code NUMBER; V_DBMS_Error_Text VARCHAR2 (2000); BEGIN V_Error_Code := Error_Code; V_Error_Text := Error_Text; V_DBMS_Error_Code := DBMS_Error_Code; V_DBMS_Error_Text := DBMS_Error_Text; IF V_Error_Code IN (40401, 40405) THEN /* || 40401, 40405 - no changes to save / apply get filtered */ NULL; ELSIF V_Error_Code IN (-1034, -3114) THEN /* || -1034, -3114 - not connected to database */ Message ('Not connect to database, exiting Form'); Exit_Form (no_validate); ELSIF V_Error_Code IN (40508, 40735) AND V_DBMS_Error_Code BETWEEN -20999 AND -20000 THEN /* || -20000 errors are raised by RAISE_APPLICATION_ERROR || They are handled in a different way */ Show_and_Log_DB_Error (V_DBMS_Error_Text); ELSE /* || All other errors went into Show_and_Log_Error, where they || get inspected, analyzed and logged. */ Show_and_Log_Error (V_Error_Code); END IF; END;
Keine Kommentare:
Kommentar veröffentlichen