1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Get Status of Call in einer Stored Procedure (PL/SQL)

Dieses Thema im Forum "DB2" wurde erstellt von Meier123, 4 Juli 2016.

  1. Meier123

    Meier123 Benutzer

    Hallo,
    in einer Prozedur, welche ich selbst erstelle, rufe ich die sysproc.admin_cmd mit einem Call auf und führe einen Load durch. Anschließend gebe ich mittels Cursor das result set zurück (inserted rows, msg retrieval usw)
    Solange die Eingabewerte, also der Pfad zur Datei etc. richtig sind, bekomme ich alle Ausgabewerte einwandfrei zurück.
    Ist beim call der admin_cmd jedoch irgendetwas nicht in Ordnung, wird meine gesamte Prozedur unterbrochen, so dass ich nicht mal einen Fehler ausgeben kann.

    Daher meine Frage:
    Ist es möglich den Status eines erfolgreichen bzw. nicht erfolgreichen Calls abzufragen, so dass ich selbst eine Fehlermeldung erstellen kann ?

    besten Dank
     
  2. akretschmer

    akretschmer Datenbank-Guru

    gibt es da keine Savepoints und/oder exception Handling?
     
  3. Meier123

    Meier123 Benutzer

    Ich kenne keinen und konnte auch nichts hilfreiches er-googeln, deshalb mein Post hier ^^
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Google mal nach 'db2 plsql savepoint', erster Treffer.
     
  5. Meier123

    Meier123 Benutzer

    Ich habe mir die Doku dazu mal angesehen. Wie soll mir das in meinem Fall helfen ? Ich will ja kein Rollback machen, ich möchte ein Fehlerhandling.
    Sprich, ist ein Fehler im Call, dann gebe ich auch eine Fehlermeldung aus. Geht der Call durch, funktioniert alles.

    CALL SYSPROC.ADMIN_CMD('LOAD FROM ' || p_infile || ' OF ' || p_infile_format || ' MESSAGES ON SERVER REPLACE INTO ' || p_target_table || ' NONRECOVERABLE');

    So sieht der Call für den Load aus.
    Aktuell beendet der Call wohl die ganze Prozedur (in welcher er aufgerufen wird), wenn eine Fehleinhabe stattfindet.
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Ich kann Dir mit DB2 nicht helfen, ich kenne das exakt zu 0 %. Vielleicht ist es ja auch nicht so mächtig wie PG / plpgsql.
     
  7. Meier123

    Meier123 Benutzer

    Hat niemand eine Idee, wie ich die Warning aus der ADMIN_CMD abfangen könnte?
     
  8. akretschmer

    akretschmer Datenbank-Guru

    google doch einfach mal, "db2 admin_cmd catch error" liefert z.B. Exception / error handlers in DB2?. Ansonsten: das ist Löhn-Software, da hast doch sicher eine Lizenz und auch Support vom Hersteller, oder?
     
  9. Meier123

    Meier123 Benutzer

    Google hab ich schon bis ins letzte durchforstet. Ja meine Firma hat eine, danke für den Hinweis. Muss ich mal mit meinen Chef abklären, ob das eine Möglichkeit wäre... Meistens sind die von IBM bei sowas allerdings auch "blind"
     
  10. akretschmer

    akretschmer Datenbank-Guru

    Interessant.
     
  11. Meier123

    Meier123 Benutzer

    Ich würde gerne eine eigene Exception um den admin_cmd call bauen, allerdings komme ich da irgendwie nicht weiter.

    PHP:
    CALL SYSPROC.ADMIN_CMD('LOAD FROM ' || p_infile || ' OF ' || p_infile_format || ' MESSAGES ON SERVER REPLACE INTO ' || p_target_table || ' NONRECOVERABLE');

    DECLARE EXIT 
    HANDLER FOR SQLWARNING
    BEGIN
    signal SQLSTATE 
    '99998' set message_text='Error 1';
    END;

    ASSOCIATE RESULT SET LOCATORS(result1WITH PROCEDURE sysproc.ADMIN_CMD;
    ALLOCATE rsCur CURSOR FOR RESULT SET result1;
    usw.....

    Ich habe mir schon die Doku der PL/SQL Exception angesehen aber ich werde noch nicht genau schlau drauß, wann er in die Exception rutscht, bzw ob das bei "verschachtelten"
    Prozeduren auch geht.
     
  12. Hubertus

    Hubertus Fleissiger Benutzer

Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden