View Full Version : embedded sql - Delete über mehrere Dateien
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 ?
Sorry, Doppelposting.
Das Forum war total langsam. Habe deshalb den Beitrag nochmal abgeschickt... Scheinbar wurde der erste aber doch akzeptiert.
Würde einer der Moderatoren das doppelte Posting bitte löschen ?
Danke !
Hallo,
mit einem DELETE-Statement können immer nur Datensätze aus einer einzigen Tabelle/View (bzw. physischen Datei) gelöscht werden.
Für Deine Aufgabenstellung benötigst Du einen Cursor, der betroffenen Sätze der einen Datei einliest. Anschließend werden die zugehörigen Sätze in der zweiten Datei gelöscht. Zum Schluß wird der eingelesene Datensatz der 1. Datei gelöscht.
Mit Instead of Triggern ist es zwar möglich einen Delete auf eine SQL View, die aus mehreren verknüpften Dateien besteht abzusetzen, aber im Trigger-Programm muss jede Datei/Tabelle einzeln bereinigt werden.
Birgitta
sorry, dass ich dir ausgerechnet in deinem Jubiläumsposting widersprechen muss:
das Zauberwort heißt hier referential constraint
D*B
Hallo,
mit einem DELETE-Statement können immer nur Datensätze aus einer einzigen Tabelle/View (bzw. physischen Datei) gelöscht werden.
Für Deine Aufgabenstellung benötigst Du einen Cursor, der betroffenen Sätze der einen Datei einliest. Anschließend werden die zugehörigen Sätze in der zweiten Datei gelöscht. Zum Schluß wird der eingelesene Datensatz der 1. Datei gelöscht.
Mit Instead of Triggern ist es zwar möglich einen Delete auf eine SQL View, die aus mehreren verknüpften Dateien besteht abzusetzen, aber im Trigger-Programm muss jede Datei/Tabelle einzeln bereinigt werden.
Birgitta
@Dieter
das Zauberwort heißt hier referential constraint
Dazu müssten zunächst einmal Referentielle Integritäten definiert und eingerichtet sein.
Ich könnte wetten, dass dies hier nicht der Fall ist.
Bislang bin ich nur bei einem einzigen Kunden über referentielle Integritäten gestolpert. Vielfach ist noch nicht einmal bekannt, was unter Referentiellen Integritäten zu verstehen ist und wenn es bekannt ist, dann ist es viel zu komplex und umständlich Integritäten in die bestehenden gewachsenen Datenbank-Strukturen einzubinden. Ohne vernünftiges/durchdachtes Datenbanken-Design besteht kaum eine Chance Integritäten ordentlich einzubinden. Das kostet Zeit und Geld und im Gegensatz zu irgendwelchen GUIs, die über die scharz/grünen Bildschirme gestülpt und dann Modernisierung bezeichnet werden, sieht dabei man noch nichteinmal etwas.
"... und was ich net' seh' kann ich net' verkaufe'!" (Zitat Vertriebsmensch als es um das Thema Datenbankenmodernisierung ging!)
Birgitta
Trotzdem reichen genau 2 Deletes:
delete datei2 where idx in (select idx from datei1 where datum < stichtag)
delete from datei1 where datum < stichtag
das versteht sich wohl von selber... oder eingerichtet werden, aber warum fragt da wohl jemand...frag ich mich...
@Dieter
Dazu müssten zunächst einmal Referentielle Integritäten definiert und eingerichtet sein.