sql >> Database >  >> RDS >> Oracle

Oracle-identiteitskolom en invoegen in select

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 , of UPDATE 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 andere SELECT verklaring met de UNION, INTERSECT , of MINUS 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



  1. MySQL-replicatie:foutieve transacties in op GTID gebaseerde replicatie

  2. SQL Server:converteer ((int)jaar,(int)maand,(int)dag) naar Datumtijd

  3. Wijzig de startwaarde van Django AutoField

  4. Algemene tabeluitdrukkingen:wanneer en hoe ze te gebruiken