Posts

Posts mit dem Label "Error Handling" werden angezeigt.

PL/SQL Fehlerhandling eigene Fehlercodes etc.

Ein Beispiel für eigenes Fehlerhandling: DECLARE   obj_missed EXCEPTION;   PRAGMA EXCEPTION_INIT ( obj_missed , -942); BEGIN EXECUTE IMMEDIATE('DROP TABLE mytst'); EXCEPTION   WHEN  obj_missed  THEN NULL;   WHEN OTHERS THEN RAISE; END; / Eine weitere Variante: BEGIN     EXECUTE IMMEDIATE 'DROP TABLE  mytst '; EXCEPTION     WHEN OTHERS     THEN         IF SQLCODE = -942           THEN  NULL;           ELSE  RAISE;         END IF; END; /

User defined Errors in PL/SQL

Quelle: http://download.oracle.com/docs/cd/E11882_01/server.112/e17120/ds_appdev005.htm#ADMIN12210 Bsp. für user defined error: DECLARE null_salary EXCEPTION; PRAGMA EXCEPTION_INIT(null_salary, -20101); BEGIN ... RAISE_APPLICATION_ERROR (-20101, 'salary is missing'); ... EXCEPTION WHEN null_salary THEN ... END; Ausreichend ist RAISE_APPLICATION_ERROR - Der Bereich -20000 bis -20999 ist für user defined errors freigegeben.

Error Logging im DML, DBMS_ERRLOG, ERR$

Mindestend ab Version 10g erlaubt Oracle das Loggen von Fehlern in einer separaten Tabelle - sehr nützlich für Fehleranalyse: Vorgehen: 1) Zur entsprechenden Tabelle die ERR$-Tabelle anlegen: exec dbms_errlog.create_error_log( <Tbl>); 2) Das entsprechende Statement mit dem Zusatz LOG ERRORS REJECT LIMIT UNLIMITED; aufrufen. 3) Nach dem Lauf evtl. Prüfen: select * from ERR$_<Tbl> ; Quellen: http://www.psoug.org/reference/dbms_errlog.html http://askanantha.blogspot.com/2008/06/error-logging-using-dbmserrlog.html http://download.oracle.com/docs/cd/B19306_01/server.102/b14223/transform.htm#sthref786 Wichtig: Die ERR$-Tabelle will gepflegt werden. Gerade bei LIMIT UNLIMITED kann die Tabelle u.U. schnell sehr groß werden! U.U. VOR dem Lauf diese Tabelle truncaten, damit sofort die Meldungen des aktuellen Laufs analysiert werden.