Anmelden

View Full Version : Update während Insert - Sätze kopieren



Tobse77
24-10-08, 11:36
Hallo zusammen,

gibt es eine Möglichkeit Sätze innerhalb einer Datei zu kopieren und dabei zu ändern?

Beispiel: Ich möchte alle Kunden-Sonderpreise innerhalb unserer Sonderpreisdatei auch einem anderen Kunden zuordnen, diese aber um 3% erhöhen.

Aufbau:
KdNr (7,0), TNr (15A), Preis (9,3)

Bisher habe ich die Sonderpreisdatei ohne Sätze dupliziert, die relevanten Sätze per Insert eingefügt und anschließend per Update auf die neue KundenNr und den entsprechenden Preis geändert. Anschließend wiederum per Insert in die Sonderpreisdatei eingefügt.

Insert into MyLib/MyDuplicate
Select * from Sonderpreisdatei
Where KdNr = 4711
174 Sätze eingefügt

Update MyLib/MyDuplicate set KdNr = 4712, Preis = round(Preis*1,03, 2)
174 Sätze geändert

Insert into Sonderpreisdatei
Select * from MyLib/MyDuplicate
174 Sätze eingefügt

Ist der Umweg über die leere Datei notwendig, oder kann ich - ähnlich einem Subselect - die Datensätze während des Inserts ändern?
Interessant wäre dies auch für Embedded SQL-Belange, da ich hier nicht erst recht nicht über eine Zwischendatei arbeiten möchte, um Sätze zu duplizieren und zu ändern. Konkret würde ich gerne Sätze zur Laufzeit duplizieren und mit einem anderen Status versehen.

MfG,
Tobias

Fuerchau
24-10-08, 11:53
Dies ist eine typische Triggergeschichte.
DerTrigger kann bei jedem BEFORE-Insert/Update aufgerufen werden und (falls erlaubt) auch Änderungen des Puffers vornehmen.

SQL selber erlaubt dies nicht.

Du kannst aber deinen "Select * " ja so modifizieren, dass die gewünschten Daten bereits ausgewählt sind (Berechnungen, Konstanten usw.).

Pikachu
24-10-08, 11:56
Insert into MyLib/MyDuplicate
Select 4712, TNr, round(Preis*1,03, 2) from Sonderpreisdatei
Where KdNr = 4711

Tobse77
24-10-08, 12:47
Vielen Dank für die Antworten. Mit Pikachus Code funktionierts genau so, wie ich es wollte - Dankeschön!!

Einziger Wermutstropfen ist hier die Einzelauflistung der Felder, die nicht zu ändern sind. Insofern werde ich im interaktiven SQL-Umfeld wohl doch lieber mit der Zwischendatei arbeiten, da es einfach schneller geht, als alle Felder zu benennen.