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

Meier123

Benutzer
Beiträge
8
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
 
Werbung:
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.
 
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.
 
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"
 
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(result1) WITH 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.
 
Werbung:
Zurück
Oben