sql >> Base de Datos >  >> RDS >> Oracle

Columna de identidad de Oracle e insertar en seleccionar

Creo que la siguiente consulta funciona, ¡no la he probado!

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

No estoy seguro, si te ayuda de alguna manera.

Para, GENERATED ALWAYS AS IDENTITY Oracle utiliza internamente una secuencia solamente. Y las opciones de Secuencia general también se aplican a esto.

NEXTVAL se usa para obtener la siguiente secuencia disponible y, obviamente, es una pseudocolumna.

Lo siguiente es de Oracle

No puede usar CURRVAL y NEXTVAL en las siguientes construcciones:

  • Una subconsulta en un DELETE , SELECT o UPDATE declaración
  • Una consulta de una vista o de una vista materializada
  • Una instrucción SELECT con el operador DISTINCT
  • Una instrucción SELECT con una cláusula GROUP BY o una cláusula ORDER BY
  • Un SELECT declaración que se combina con otro SELECT declaración con la UNIÓN, INTERSECT , o MINUS establecer operador
  • La cláusula WHERE de una sentencia SELECT
  • Valor DEFAULT de una columna en una sentencia CREATE TABLE o ALTER TABLE
  • La condición de una restricción CHECK

La subquery y SET la regla de operaciones anterior debería responder a su pregunta.

Y por la razón de NULL, cuando pseudocolumn (por ejemplo, NEXTVAL) se usa con una operación SET o cualquier otra regla mencionada anteriormente, la salida es NULL, ya que Oracle no pudo extraerlos en efecto con la combinación de selecciones múltiples.

Veamos la siguiente consulta,

select rownum from dual
union all 
select rownum from dual

el resultado es

ROWNUM
1
1