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
)
War es hilfreich?

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:

  1. from Klausel in update Satz (Sie benötigen einen subselect dafür schreiben)
  2. dbo Schema, es sei denn, Sie haben tatsächlich einen Benutzer namens dbo in oracle Besitz der Tabelle, die Sie versuchen, zu aktualisieren
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top