Announcement

Collapse
No announcement yet.

Keine Ausgabe bei Application Error

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Keine Ausgabe bei Application Error

    Hallo zusammen,

    Der folgende Block (siehe unten) ist Bestandteil eines Skriptes, das einen Fehler werfen soll, wenn in einem bestimmten Schema nicht alle Objekte gelöscht werden konnten.
    Zusätzlich sollen die Objekte auf die Konsole ausgegeben werden. Die Ausgabe funktioniert so lange, wie ich keinen Application Error werfe. Kommentiere ich den Block ein, wirft Oracle nur den Fehler und schreibt die dbms_output Ausgaben nicht mehr raus.
    In eine Datei will ich nicht schreiben, weil dann das ganze Rahmenskript angepasst werden müsste.

    Hat jemand ne Idee, warum sich Oracle so seltsam verhält.

    Vielen Dank

    Mark


    DECLARE
    lv_anz_fehler number := 0;

    Cursor lc_nicht_geloescht_objekte is
    Select a.OBJECT_NAME , a.OBJECT_TYPE
    from all_objects a
    where a.OWNER = 'TEST_STAGE'
    and a.OBJECT_TYPE in ('PACKAGE','TABLE', 'PROCEDURE', 'FUNCTION', 'DIRECTORY' )
    and a.OBJECT_NAME not in ('WB_RT_VERSION_FLAG', 'WMP_API_CALL', 'VBZ$CHECKPOINT_SID_9I', 'TOAD_PLAN_TABLE')
    order by a.OBJECT_TYPE, a.OBJECT_NAME ;

    BEGIN


    for lr_nicht_geloescht_objekte in lc_nicht_geloescht_objekte
    loop
    dbms_output.put_line ('v_anz_fehler: '||lv_anz_fehler);
    if lv_anz_fehler = 0 then
    dbms_output.put_line ('************************************************ **********************');
    dbms_output.put_line ('Folgende Objekte konnten nicht automatisch aus der DB entfernt werden.');
    dbms_output.put_line ('Bitte manuell loeschen und dann das Skript mit dem naechsten Schritt ');
    dbms_output.put_line ('fortsetzen. ');
    dbms_output.put_line (' ');
    end if;
    lv_anz_fehler := lv_anz_fehler +1;
    dbms_output.put_line (lr_nicht_geloescht_objekte.OBJECT_NAME ||' ('|| lr_nicht_geloescht_objekte.OBJECT_TYPE ||')');
    end loop;
    dbms_output.put_line ('************************************************ **********************');
    if lv_anz_fehler > 0 then
    raise_application_error (-20001, 'Fehler beim Loeschen in Stage');
    end if;
    END;
    /

  • #2
    mit einem :

    .
    .
    .
    EXCEPTION
    when OTHERS then
    .
    .
    deine Ausgabe
    .
    .
    END ;
    /

    sollte es gehen.

    s.a:
    http://fara.cs.uni-potsdam.de/~uhlmann/19/ch09.html

    Comment


    • #3
      Ja, aber

      Ja, aber dann sieht das aufrufende Skript nicht mehr, dass ein Fehler aufgetreten ist und läuft weiter.

      Comment


      • #4
        dann musst du eine Variable setzen, die es ihm mitteilt.

        Comment


        • #5
          und wie mach ich das? Mein aufrufendes Skript ist ein ksh Skript. Ich habe es schon mit exit 1 versucht, aber das hat auch nicht funktioniert.

          Comment


          • #6
            was ist ein "ksh Skript"

            Comment


            • #7
              Steht für Korn Shell. Typische Shell im Unix-Umfeld. Die Bash finde ich zwar besser, die Korn-Shell ist aber im Projekt gesetzt.

              Comment


              • #8
                Hi,

                das machst Du in sqlplus so:
                Code:
                VARIABLE errorcode NUMBER
                Benutzt wird es so:
                Code:
                :errorcode=-1
                Und die Rückgabe geht so:
                Code:
                EXIT :errorcode
                Wir haben die bash und die kann den Fehlercode so auswerten.

                Comment


                • #9
                  Da SQL-Plus ein Consolenprogramm ist, sollte so auch in der KornShell gehen. Mit dem Dos-Client funktioniert es auch.

                  Comment

                  Working...
                  X