Oracle - SQL - insert into mit sub-select
Ich bin immer ORA-00947: not enough values
aus der Abfrage unten:
insert into tableb
(colA, colb, colc, cold)
select
(select max(rec_no)+1 from tableb)
F2,
F3,
F4
from tablea;
Kann mir jemand zeigen der richtige Weg, um eine sub-query für ein inser into/select-Anweisung?
Dank
- Ich hoffe, dass Sie nicht versuchen, zu erstellen eine eindeutige ID mit, dass
max()
approache. Denn es wird einfach nicht funktionieren. Besser eine Sequenz verwenden - eigentlich ist das, was ich versuchte. Kannst du uns ein link zu einer Diskussion darüber, wie würde ich erreichen, das mit einer Sequenz? Dank
- Siehe meine Antwort. Die Sequenz immer noch nicht das problem lösen, was ist zu tun, wenn tablea leer ist (wie David Aldridge erwähnt)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fehlt Ihnen nur noch ein Komma. Wie es ist, Oracle denkt
F2
ist der name der sub-select.Nur zuverlässige, schnelle und skalierbare Weise zu generieren eindeutiger IDs mithilfe von Sequenzen.
Der Grund, warum die
max()
"Lösung" nicht funktioniert, ist eine Transaktion, die nicht sehen, nicht festgeschriebene änderungen, die von einer anderen Transaktion. Also zwei gleichzeitige Transaktionen können wind-up mit dem gleichen Wert fürmax()
was wiederum generieren von doppelten id-Werte.Erstellen, die Werte aus einer Sequenz in Ihrem Fall, müssen Sie selbstverständlich zunächst eine Sequenz zu erstellen:
Verwenden Sie dann die Reihenfolge in der select-Anweisung: