PDA

View Full Version : SQL: drop table mit Abfrage auf Existenz?



rebe
14-01-08, 12:58
Hallo!

Ich möchte in einer Stored Procedure ein drop table ausführen. Wenn die Datei nicht existiert, bricht die Stored Procedure ab. Kann ich den Fehler irgendwie abfangen oder vor drop table auf die Existenz der Datei prüfen?

In MySQL gibt es sowas: drop table if exists meinetab
Funktioniert auf der iSeries nicht.

Vielen Dank für Hinweise.

Gruß
Reiner

Fuerchau
14-01-08, 13:02
Normalerweise gibts keinen Abbruch sondern nur einen entsprechenden SQLCOD.
Schau mal im Joblog nach der Ursache des Abbruches.

Ansonsten kann man per

"SELECT NAME, DBNAME from SYSTABLES where NAME=: MYNAME and DBNAME = : MYLIB"

abfragen.

rebe
14-01-08, 13:29
Danke für die Antwort.
Wenn die Datei beim Drop nicht da ist, bekomme ich einen Abbruch mit SQL0204. Select über die Systables geht auch nicht, da die Datei in der QTEMP erstellt wird. Dass wird ja dann nicht mit protokolliert.

Reiner

Fuerchau
14-01-08, 13:54
Dann versuch doch einfach:

select count(*) into : MyCount from qtemp/mytable

rebe
14-01-08, 14:36
Das geht ja auch nicht so einfach. Wenn die Datei nicht da ist, bricht der Select mit einer Fehlermeldung ab. Ich habe eine Stored Procedure und kein embedded SQL. Aber irgendwas muss es da doch auch geben wegen Fehler abfangen.

Fuerchau
14-01-08, 14:59
Wie gesagt, normalerweise gibt es keine Abbrüche bei SQL sondern nur SQLCOD und SQLSTATE.

Wenn ich einen entsprechenden SQL-Befehl für DROP TABLE verwende, gibts zwar im Joblog einen Fehler, aber keinen Programmabsturz.

BenderD
14-01-08, 18:15
wenn es sich um eine SQL Procedure handelt, dann brauchst du da einen CONTINUE HANDLER FOR SQL EXCEPTIONS -> siehe SQL Reference
wenn es sich um ein abbrechendes SQL Script handelt, dann kann man den errorlevel erhöhen

mfg

Dieter Bender


Hallo!

Ich möchte in einer Stored Procedure ein drop table ausführen. Wenn die Datei nicht existiert, bricht die Stored Procedure ab. Kann ich den Fehler irgendwie abfangen oder vor drop table auf die Existenz der Datei prüfen?

In MySQL gibt es sowas: drop table if exists meinetab
Funktioniert auf der iSeries nicht.

Vielen Dank für Hinweise.

Gruß
Reiner

rebe
15-01-08, 08:24
Danke Dieter, das habe ich gesucht.

Habe mir gestern nachmittag schon ein Buch über Stored Procedures rausgesucht und mir das Kapital Error Handling angesehen. Da ist das mit dem Continue Handler beschrieben.

Gruß
Reiner