Hallo Forum,

ich habe folgendes Problem:

Im Cobol-Programm wird mittels eines PL-SQL-Blocks (DECLARE P_PROZNR NUMBER(03) := 008; P_KANR NUMBER(04) := 1700; BEGIN PACK_QIMB019.CONTROL(P_PROZNR,P_KANR); END; ) eine Prozedur aus einem Package aufgerufen. Diese Prozedur ruft ihrerseits weitere Prozeduren mit weiteren Prozeduren auf (insgesamt 3 Ebenen ohne das COBOL-Programm).

Wenn auf der unteren Ebene eine Exception ausgelöst wird, dann wird diese Exception im Exception-Handler behandelt und mit RAISE jeweils weiter nach oben durchgereicht bis ins COBOL-Programm. Fehlerbehandlung in jedem Exception-Handler: DBMS_OUTPUT.PUT_LINES und Einträge in eine Log-Tabelle. DBMS_OUTPUT.GET_LINES mit Display-Ausgabe sowie der Programmabbruch werden vom COBOL-Programm durchgeführt.

Fallgruppen:

A) ORA-06510: PL/SQL: unhandled user-defined exception
B) ORA-06511: PL/SQL: Cursor wurde bereits geöffnet

A und B: o.k., die Exception Handler werden der Reihe nach durchlaufen, alle entsprechenden Anweisungen korrekt ausgeführt.

C) ORA-06502: PL/SQL: numeric or value error: character string buffer too small. ORA-06512: at "CALLCENTER.PACK_QIMB019", line 104.ORA-20667: . kann Eintrag in
Tabelle KONTERG nicht zufüge
Dieser Fehler wird durch einen Trigger ausgelöst, der den Insert bestimmter Werte nicht zulässt.
D) ORA-01403: PL/SQL: NO_DATA_FOUND

In den Fällen C und D wird DBMS_OUTPUT aus den Exception-Handlern der Prozedurenebenen 2 und 3 bedient, nicht jedoch aus dem Exception-Handler der direkt vom COBOL-Programm aufgerufenen Prozedur. Einträge in die Log-Tabelle erfolgen nach dem Fehler gar nicht mehr, obwohl nach jedem Eintrag ein COMMIT abgesetzt würde.

d.h.
Ebene 3: DBMS_OUTPUT: ja, Log_Tabelle: nein, RAISE: ja
Ebene 2: DBMS_OUTPUT: ja, Log_Tabelle: nein, RAISE: ja
Ebene 1: DBMS_OUTPUT: nein, Log_Tabelle: nein, RAISE: ja
COBOL-Programm: Ausgabe DBMS_OUTPUT, Programmabbruch

Warum verläuft die Fehler-Verarbeitung in den Fallgruppen C und D nicht ordnungsgemäß? Auffällig ist, daß es sich hier um Fehler handelt, die ihren Ursprung außerhalb der Prozedur haben.

MfG
Klaus