Update-Abfrage läuft in SQL Server, aber nicht in Oracle
-
28-09-2019 - |
Frage
Ich brauche diese Update-Abfrage auf SQL Server und Oracle laufen. Unsere Oracle Version 10.2 wenn diese Fragen. Wenn ich die Abfrage in Oracle Ich betreiben bekommen „ERROR ORA-00933: SQL-Befehl nicht richtig beendet“. Was muss ich tun, um dieses zu erhalten in Oracle laufen?
UPDATE dbo.tableUpdate
SET fieldA = tt.fieldB
FROM dbo.tableTranslate tt
WHERE
tt.fieldC = dbo.tableUpdate.fieldC
AND
tt.fieldD = dbo.tableUpdate.fieldA
AND
1 = (
SELECT COUNT(tblTrans.fieldD)
FROM dbo.tableTranslate tblTrans
WHERE
tblTrans.fieldC = dbo.tableUpdate.fieldC
AND
tblTrans.fieldD = dbo.tableUpdate.fieldA
)
Lösung
Die UPDATE ... FROM Syntax ist für Oracle nicht gültig. Sie müssen eine Unterabfrage verwenden, wie folgt aus:
UPDATE dbo.tableUpdate t
SET t.fieldA = (SELECT tt.fieldB
FROM dbo.tableTranslate tt
WHERE tt.fieldC = t.fieldC
AND tt.fieldD = t.fieldA
)
WHERE 1 = (
SELECT COUNT(tblTrans.fieldD)
FROM dbo.tableTranslate tblTrans
WHERE tblTrans.fieldC = t.fieldC
AND tblTrans.fieldD = t.fieldA
)
Andere Tipps
Die Syntax für die Co-verwandte Sub-Abfrage ist ein wenig anders in Oracle.
UPDATE dbo.tableUpdate
SET fieldA = (select tt.fieldB
FROM dbo.tableTranslate tt
WHERE
tt.fieldC = dbo.tableUpdate.fieldC
AND
tt.fieldD = dbo.tableUpdate.fieldA)
AND
1 = (
SELECT COUNT(tblTrans.fieldD)
FROM dbo.tableTranslate tblTrans
WHERE
tblTrans.fieldC = dbo.tableUpdate.fieldC
AND
tblTrans.fieldD = dbo.tableUpdate.fieldA)
Sie müssen vollständig Ihre Abfrage für Oracle neu zu schreiben. Einige Dinge, die nicht funktionieren wird in Oracle 10.2:
-
from
Klausel inupdate
Satz (Sie benötigen einen subselect dafür schreiben) -
dbo
Schema, es sei denn, Sie haben tatsächlich einen Benutzer namensdbo
in oracle Besitz der Tabelle, die Sie versuchen, zu aktualisieren
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow