Oracle
 sql >> Base de données >  >> RDS >> Oracle

Colonne d'identité Oracle et insérer dans select

Je crois que la requête ci-dessous fonctionne, je n'ai pas testé !

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

Je ne sais pas si cela vous aide d'une manière ou d'une autre.

Pour, GENERATED ALWAYS AS IDENTITY Oracle utilise uniquement une séquence en interne. Et les options sur la séquence générale s'appliquent également à cela.

NEXTVAL est utilisé pour récupérer la prochaine séquence disponible, et il s'agit évidemment d'une pseudo-colonne.

Ce qui suit provient d'Oracle

Vous ne pouvez pas utiliser CURRVAL et NEXTVAL dans les constructions suivantes :

  • Une sous-requête dans un DELETE , SELECT , ou UPDATE déclaration
  • Une requête d'une vue ou d'une vue matérialisée
  • Une instruction SELECT avec l'opérateur DISTINCT
  • Une instruction SELECT avec une clause GROUP BY ou une clause ORDER BY
  • Un SELECT instruction qui est combinée avec un autre SELECT instruction avec l'UNION, INTERSECT , ou MINUS définir l'opérateur
  • La clause WHERE d'une instruction SELECT
  • Valeur par défaut d'une colonne dans une instruction CREATE TABLE ou ALTER TABLE
  • La condition d'une contrainte CHECK

La subquery et SET la règle d'opérations ci-dessus devrait répondre à votre question.

Et pour la raison de NULL, lorsque pseudocolumn (par exemple, NEXTVAL) est utilisé avec une opération SET ou toute autre règle mentionnée ci-dessus, la sortie est NULL, car Oracle n'a pas pu les extraire en effet en combinant plusieurs sélections.

Voyons la requête ci-dessous,

select rownum from dual
union all 
select rownum from dual

le résultat est

ROWNUM
1
1