PDA

View Full Version : Embedded SQL - Löschen über mehrere Dateien



VAHLE
15-05-08, 13:00
Hallo zusammen,

ist es möglich per embedded sql im RPG Datensätze aus mehreren Dateien zu löschen ?

Beispiel:

Ich habe 2 Dateien, die über ein Schlüsselfeld miteinander verknüpft sind.
Nun möchte ich alle Sätze aus beiden Dateien löschen, deren Datum älter als ein Stichtag sind.
Das Datumsfeld habe ich aber nur in Datei 1.

SQL sähe meiner Meinung nach normalerweise so aus:

delete datei1, datei2 from datei1, datei2 where datei1.idx = datei2.idx and datei1.datum < stichtag

wenn ich nun im SEU das so eingebe
/EXEC SQL DELETE DATEI1, DATEI2 (...)
erhalte ich nen Fehler: "Token DATEI1 ungültig. Gültige Token: FROM."

Frage: Wird das löschen über mehrere Tabellen nicht unterstützt ?

Pikachu
15-05-08, 13:16
Da benötigst du wahrscheinlich zwei getrennte DELETEs:


DELETE FROM DATEI2 WHERE IDX IN
(SELECT IDX FROM DATEI1 WHERE DATUM < Stichtag)

DELETE FROM DATEI1 WHERE DATUM < Stichtag

VAHLE
15-05-08, 13:59
Hi,

Danke für den Tipp.

Für das Beispiel habe ich die ganze Sache etwas vereinfacht, indem ich nur 1 Schlüsselfeld angegeben hatte, über das die Dateien miteinander verknüpft sind.
Die Realität sieht so aus, dass es 6 Schlüsselfelder sind, die einen eindeutigen Schlüssel ausmachen.

Wie das ganze dann mit der IN Klausel zu lösen ist, weiss ich nicht.

Habe es nun folgendermassen gelöst:

delete from datei2 WHERE EXISTS (SELECT * FROM datei1 WHERE datum < '01.01.2002' AND datei1.feld1 = datei2.feld1 and datei1.feld2 = datei2.feld2 usw.)

delete from datei1 WHERE datum < '01.01.2002'

Und das ganze scheint auf den ersten Blick sogar zu laufen. ;)

Gruß,
Olli