sql >> Databasteknik >  >> RDS >> Oracle

Oracle identitet kolumn och infoga i välj

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 , eller UPDATE uttalande
  • 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 SELECT sats som kombineras med en annan SELECT sats med UNION, INTERSECT , eller MINUS stä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



  1. Flera array_agg()-anrop i en enda fråga

  2. Konvertera SQL Server-fråga till MySQL

  3. Hur tar man bort dubbletter från kommaseparerad lista med regex i Oracle men jag vill inte ha dubblettervärden?

  4. Logisk replikeringspartitionering med PostgreSQL 13