Ik geloof dat de onderstaande query werkt, ik heb het niet getest!
INSERT INTO Test (b)
SELECT * FROM
(
SELECT 'z' FROM dual
UNION ALL
SELECT 'zz' FROM dual
);
Ik weet niet zeker of het je op de een of andere manier helpt.
Voor, GENERATED ALWAYS AS IDENTITY
Oracle gebruikt intern alleen een Sequence. En de opties op de algemene volgorde zijn hier ook op van toepassing.
NEXTVAL wordt gebruikt om de volgende beschikbare reeks op te halen, en het is duidelijk een pseudokolom.
Het onderstaande is van Oracle
U kunt CURRVAL
niet gebruiken en NEXTVAL
in de volgende constructies:
- Een subquery in een
DELETE
,SELECT
, ofUPDATE
verklaring - Een zoekopdracht naar een weergave of een gerealiseerde weergave
- Een SELECT-instructie met de DISTINCT-operator
- Een SELECT-instructie met een GROUP BY-clausule of ORDER BY-clausule
- Een
SELECT
statement dat wordt gecombineerd met een andereSELECT
verklaring met de UNION,INTERSECT
, ofMINUS
operator instellen - De WHERE-component van een SELECT-instructie
- DEFAULT-waarde van een kolom in een CREATE TABLE- of ALTER TABLE-instructie
- De voorwaarde van een CHECK-beperking
De subquery
en SET
bovenstaande operatieregel zou uw vraag moeten beantwoorden.
En voor de reden voor NULL, wanneer pseudocolumn
(bijv. NEXTVAL) wordt gebruikt met een SET-bewerking of andere hierboven genoemde regels, de uitvoer is NULL, omdat Oracle ze niet kon extraheren door meerdere selecties te combineren.
Laten we de onderstaande vraag eens bekijken,
select rownum from dual
union all
select rownum from dual
het resultaat is
ROWNUM
1
1