Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle-Identitätsspalte und fügen Sie sie in select ein

Ich glaube, die folgende Abfrage funktioniert, ich habe sie nicht getestet!

INSERT INTO Test (b)
SELECT * FROM
(
   SELECT 'z' FROM dual
   UNION ALL
   SELECT 'zz' FROM dual
);

Ich bin mir nicht sicher, ob es dir irgendwie hilft.

Für GENERATED ALWAYS AS IDENTITY Oracle verwendet intern nur eine Sequenz. Und die Optionen zur allgemeinen Sequenz gelten auch dafür.

NEXTVAL wird verwendet, um die nächste verfügbare Sequenz zu holen, und offensichtlich ist es eine Pseudospalte.

Das Folgende ist von Oracle

Sie können CURRVAL nicht verwenden und NEXTVAL in den folgenden Konstrukten:

  • Eine Unterabfrage in einem DELETE , SELECT , oder UPDATE Erklärung
  • Eine Abfrage einer Ansicht oder einer materialisierten Ansicht
  • Eine SELECT-Anweisung mit dem DISTINCT-Operator
  • Eine SELECT-Anweisung mit einer GROUP BY-Klausel oder ORDER BY-Klausel
  • Ein SELECT -Anweisung, die mit einem anderen SELECT kombiniert wird -Anweisung mit der UNION, INTERSECT , oder MINUS Set-Operator
  • Die WHERE-Klausel einer SELECT-Anweisung
  • DEFAULT-Wert einer Spalte in einer CREATE TABLE- oder ALTER TABLE-Anweisung
  • Die Bedingung einer CHECK-Einschränkung

Die subquery und SET Die obige Betriebsregel sollte Ihre Frage beantworten.

Und aus dem Grund für NULL, wenn pseudocolumn (z. B. NEXTVAL) mit einer SET-Operation oder anderen oben erwähnten Regeln verwendet wird, ist die Ausgabe NULL, da Oracle sie nicht effektiv mit der Kombination mehrerer Auswahlen extrahieren konnte.

Sehen wir uns die folgende Abfrage an,

select rownum from dual
union all 
select rownum from dual

das Ergebnis ist

ROWNUM
1
1