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