Jag tror att frågan nedan fungerar, jag har inte testat!
INSERT INTO Test (b)
SELECT * FROM
(
SELECT 'z' FROM dual
UNION ALL
SELECT 'zz' FROM dual
);
Inte säker på om det hjälper dig på något sätt.
För, GENERATED ALWAYS AS IDENTITY Oracle använder endast en Sequence internt. Och alternativen för allmän sekvens gäller även för detta.
NEXTVAL används för att hämta nästa tillgängliga sekvens, och det är uppenbarligen en pseudokolumn.
Nedanstående är från Oracle
Du kan inte använda CURRVAL och NEXTVAL i följande konstruktioner:
- En underfråga i en
DELETE,SELECT, ellerUPDATEuttalande - En fråga om en vy eller en materialiserad vy
- En SELECT-sats med DISTINCT-operatorn
- En SELECT-sats med en GROUP BY-sats eller ORDER BY-sats
- En
SELECTsats som kombineras med en annanSELECTsats med UNION,INTERSECT, ellerMINUSställ in operatör - WHERE-satsen i en SELECT-sats
- DEFAULT värde för en kolumn i en CREATE TABLE- eller ALTER TABLE-sats
- Tillståndet för en CHECK-begränsning
subquery och SET operationsregeln ovan bör svara på din fråga.
Och av anledningen till NULL, när pseudocolumn (t.ex. NEXTVAL) används med en SET-operation eller andra regler som nämns ovan, utdata är NULL, eftersom Oracle inte kunde extrahera dem i praktiken genom att kombinera flera val.
Låt oss se frågan nedan,
select rownum from dual
union all
select rownum from dual
resultatet är
ROWNUM
1
1