Mehrere Zeilen aktualisieren, die in oracle-sql mit for-Schleife
den unten FOR-Schleife funktioniert nicht. Ich habe zwei Spalten PID, ZAHLUNG in Tabelle t1 und Tabelle t2. Ich aktualisieren möchten, die ZAHLUNG in der Tabelle t1 aus der Tabelle t2 where t1.PID=t2.PID
FOR X IN(select paymentterm,pid from temp_project)
LOOP
update project p
set p.paymentterm=temp_project.PID
where p.PID=X.PID;
END LOOP;
commit;
Warum haben Sie Hinzugefügt, eine mysql-tag? Die Schnittstellen, die Sie verwenden, sind nicht wichtig für diese Frage.
eigentlich alle diese Beispiele, die Ihren Weg ist die einzige, die für mich gearbeitet, die mehrere Zeilen aktualisieren, basierend auf einer Auswahl.
eigentlich alle diese Beispiele, die Ihren Weg ist die einzige, die für mich gearbeitet, die mehrere Zeilen aktualisieren, basierend auf einer Auswahl.
InformationsquelleAutor Pulkit Bhatia | 2014-01-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie erzielen dieses Verhalten, ohne durchgangsverdrahtung:
guter Punkt, Hinzugefügt
WHERE
- Klausel. Ich Wünsche Oracle hatte eine vernünftigeUPDATE JOIN
syntax...Sie können die beiden updates durchführen und löscht gegen die wichtigsten erhaltenen Ansichten (siehe meine Antwort). Nicht ideal, aber sauberer, als das mitmachen doppelt.
yup, ich bin mir dessen bewusst, dass. Klobig als Teufel, IMHO (nicht deine Antwort, die ich von Ihnen positiv bewertet werden - Oracle ' s Lösung für dieses problem)
Gut, es hat den Vorteil, dass Sie sehr "relational". In der Theorie eine Abfrage oder eine view oder eine Tabelle sollte alle gleichermaßen aktualisierbar, so dass diese Verknüpfung zwischen Projekt-und temp_project kann definiert werden als eine Ansicht, und das update ausgeführt.
InformationsquelleAutor Mureinik
Versuchen:
... oder, wenn temp_project.pid eingeschränkt ist, einzigartig zu sein:
Möglicherweise stellen Sie sicher, dass Sie nicht änderungen vornehmen, wo keine erforderlich sind:
(Raten bei -1000 wird eine Unmögliche Wert für paymentterm dort).
Dies könnte auch geschrieben werden als eine MERGE-Anweisung.
In der temp_project Tabelle, die pid ist nicht eindeutig. Daher kann das system nicht wissen, welcher Wert zu verwenden ist, gelten für die Tabelle Projekt. Sie sollten dieses Problem beheben, obwohl es workarounds.
versucht die zweite Methode, aber: ORA-01779: nicht ändern eine Spalte, die Karten zu einem nicht-key-preserved-Tabelle in meinem Fall kann ich nicht über eine Taste auf, da es nicht eindeutig ist.
merge auch nicht funktionieren, weil es nicht erlauben, für mehrere Zeilen. Holen Sie sich die unstable Zeilen-Meldung, wenn ich versuche, die
InformationsquelleAutor David Aldridge