Oracle Update mit innerem Join: Vermeiden von ORA-00933
Bei der Aktualisierung von Orakeltabellen mit einem inneren Join ist ORA-00933: "SQL-Befehl nicht ordnungsgemäß beendet." Dies ergibt sich aus der Verwendung einer falschen Syntax. Die Standard UPDATE ... INNER JOIN ... SET ...
-Syntax, die in anderen Datenbanken wie MySQL verwendet wird, funktioniert nicht direkt in Oracle.
Das Problem und die Lösung von Oracle
Die problematische Syntax sieht so aus:
<code class="language-sql">UPDATE table1 INNER JOIN table2 ON table1.value = table2.DESC SET table1.value = table2.CODE WHERE table1.UPDATETYPE='blah';</code>
Oracle erfordert einen anderen Ansatz. Hier ist die richtige Methode:
<code class="language-sql">UPDATE table1 SET table1.value = (SELECT table2.CODE FROM table2 WHERE table1.value = table2.DESC) WHERE table1.UPDATETYPE='blah' AND EXISTS (SELECT table2.CODE FROM table2 WHERE table1.value = table2.DESC);</code>
Hierbei wird eine Unterabfrage verwendet, um den Wert table2.CODE
für das Update und eine EXISTS
-Klausel zu erhalten, um sicherzustellen, dass das Update nur dann stattfindet, wenn eine passende Zeile in table2
vorhanden ist. Dies verhindert Fehler, die durch den Versuch verursacht werden, mit nicht existierenden Werten zu aktualisieren.
Eine alternative Methode: Inline -Ansichten
Eine andere Option besteht darin, eine Inline -Ansicht zu verwenden:
<code class="language-sql">UPDATE (SELECT table1.value as OLD, table2.CODE as NEW FROM table1 INNER JOIN table2 ON table1.value = table2.DESC WHERE table1.UPDATETYPE='blah' ) t SET t.OLD = t.NEW;</code>
Der Erfolg dieser Methode hängt davon ab, ob Oracle die Inline -Ansichts -Aktualisierung berücksichtigt, die durch bestimmte Datenbankregeln bestimmt wird. Die vorherige Methode ist im Allgemeinen zuverlässiger. Wählen Sie die Methode, die Ihren Anforderungen am besten entspricht, und testen Sie immer gründlich.
Das obige ist der detaillierte Inhalt vonWie aktualisiere ich Tabellen mit inneren Verknüpfungen in Oracle, um ORA-00933 zu vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!