Aktualisieren einer Spalte mit verketten von zwei anderen Spalte in derselben Tabelle
Ich habe eine Tabelle mit 3 Spalten a, b und c aus. Ich möchte wissen, wie zu aktualisieren, der Wert der Dritten Spalte mit verketten von zwei anderen Spalten in jeder Zeile.
before update
A B c
-------------
1 4
2 5
3 6
after update
A B c
-------------
1 4 1_4
2 5 2_5
3 6 3_6
Wie kann ich das in oracle?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstens, Sie sind in Verletzung der Regeln der Normalisierung. Sie müssen neu nachdenken über die Gestaltung. Wenn Sie die Werte in den Spalten der Tabelle, dann um einen berechneten Wert, alles, was Sie brauchen, ist ein wählen Sie - Anweisung, um das Ergebnis Holen, wie Sie wollen. Das speichern von berechneten Werten ist in der Regel eine schlechte Idee, und als ein schlechtes design.
Sowieso,
Da Sie auf
11g
, Wenn Sie wirklich wollen, um eine berechnete Spalte, dann würde ich vorschlagen, eine VIRTUELLE SPALTE als manuelles aktualisieren der Spalte. Es gibt eine Menge von overhead an ein UPDATE - Anweisung. Mit einer virtuellen Spalte verringern würde eine Menge Aufwand. Außerdem würden Sie vollständig loszuwerden, der manuelle Aufwand und die Zeilen von code zu tun, das update. Oracle übernimmt diese Aufgabe für Sie.Natürlich, verwenden Sie den gleichen Zustand der Verkettung in der virtual column-Klausel.
Etwas wie
Column_c varchar2(50) GENERATED ALWAYS AS (column_a||'_'||column_b) VIRTUAL
Hinweis : gibt Es bestimmte Einschränkungen auf seine Verwendung. Bitte beachten Sie die Dokumentation, bevor Sie Sie implementieren. Jedoch für den einfachen Anwendungsfall zur Verfügung gestellt von OP, eine virtuelle Spalte eine gerade Passform.
Update ich habe einen kleinen test. Es waren nur wenige Beobachtungen. Bitte Lesen Sie diese Frage für ein besseres Verständnis darüber, wie zu implementieren ist mein Vorschlag.
Verwenden Sie die concatentation Betreiber
||
:Oder besser, zu vermeiden, dass erneut ausführen wenn Zeilen eingefügt oder aktualisiert: