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, ouUPDATEdé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
SELECTinstruction qui est combinée avec un autreSELECTinstruction avec l'UNION,INTERSECT, ouMINUSdé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