Im Kontext von SQL stellt die EGL-Anweisung 'replace' überarbeitete Informationen aus einer SQL-Datensatzvariablen zurück in eine Zeile in einer relationalen Datenbank.
Die Anweisung erstellt eine SQL-Anweisung UPDATE im generierten Code. EGL kann diese Anweisung implizit auf Basis von Informationen und Eigenschaften in Ihrer SQL-Datensatzvariablen erstellen, oder Sie können expliziten SQL-Code in die Anweisung 'replace' einbetten, indem Sie die Direktive '#sql' verwenden (siehe sql (Direktive)).

UPDATE Tabellenname
SET Spalte01 = :mein_Feld01,
Spalte02 = :mein_Feld02,
...
SpalteNN = :mein_FeldNN
WHERE CURRENT OF Cursor
Der folgende Code schließt die Anweisung 'replace' ein. Der Code stammt aus dem vollständigen SQL-Programm, das Sie unter EGL-SQL-Beispielprogramm vorfinden.
try
get dept forupdate;
dept.description = "Test Engineers";
replace dept;
commit();
onException(sqlEx SQLException)
sqlFailure();
end
Das folgende Beispiel zeigt die Anweisung 'replace' für eine Multiple-Row-Operation:
employees Employee[0]{rowsetsize=10};
Open resultset1 forUpdate with #sql{
select eID, uName, PASSWORD, fName, lName, office, sex, EMail
from EMPLOYEETEST
} for employees;
Get Next employees;
//Hierduch wird die zweite Zeile in der Zeilengruppe mit aktuellem Inhalt aktualisiert
employees[2].uName = “test”;
Replace employees[2];
//Hierduch wird die zweite Zeile in der Zeilengruppe mit einer expliziten Variablen aktualisiert
newName CHAR(20) = “test1”;
Replace employees[2]
#with SQL{ update EMPLOYEETEST
set uName = :newName };
// Der Index kann eine Variable sein
i int = 2;
Replace employees[i];
//Hierdurch werden alle Zeilen in der Zeilengruppe mit 'uName = "test"' aktualisiert
//Es muss explizites SQL verwendet werden, da ansonsten ein
//Gültigkeitsfehler auftritt.
uName CHAR(10) = “test”;
Replace employees
#with SQL{ update EMPLOYEETEST
set uName = :uName };
| Plattform | Problem |
|---|---|
| COBOL-Generierung | In COBOL wird die beste Leistung erzielt, wenn stets die Klausel 'from Ergebnismenge' in die Anweisung 'replace' eingeschlossen wird. |
| SQL Server | Die Anweisungen 'delete last' und 'get last' für Multiple-Row-Funktionen können nicht zusammen verwendet werden. Die Ergebnismenge wird geschlossen, wenn beide Anweisungen einmal ausgeführt werden. |
| DB2 for i5/OS | Die Journalfunktion muss aktiviert sein, oder 'transaction isolation=none' muss der Verbindungszeichenfolge hinzugefügt werden. |