Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Coluna de identidade Oracle e insira em select


Eu acredito que a consulta abaixo funciona, eu não testei!
INSERT INTO Test (b)
SELECT * FROM
(
   SELECT 'z' FROM dual
   UNION ALL
   SELECT 'zz' FROM dual
);

Não tenho certeza, se isso te ajuda de alguma forma.

Para, GENERATED ALWAYS AS IDENTITY O Oracle usa internamente apenas uma Sequência. E as opções de Sequência geral também se aplicam a isso.

NEXTVAL é usado para buscar a próxima sequência disponível e, obviamente, é uma pseudocoluna.

O abaixo é da Oracle

Você não pode usar CURRVAL e NEXTVAL nas seguintes construções:
  • Uma subconsulta em um DELETE , SELECT , ou UPDATE declaração
  • Uma consulta de uma visualização ou de uma visualização materializada
  • Uma instrução SELECT com o operador DISTINCT
  • Uma instrução SELECT com uma cláusula GROUP BY ou uma cláusula ORDER BY
  • Um SELECT instrução que é combinada com outro SELECT declaração com UNION, INTERSECT , ou MINUS operador definido
  • A cláusula WHERE de uma instrução SELECT
  • valor DEFAULT de uma coluna em uma instrução CREATE TABLE ou ALTER TABLE
  • A condição de uma restrição CHECK

A subquery e SET regra de operações acima deve responder à sua pergunta.

E pelo motivo de NULL, quando pseudocolumn (por exemplo, NEXTVAL) é usado com uma operação SET ou qualquer outra regra mencionada acima, a saída é NULL, pois o Oracle não poderia extraí-los com efeito com a combinação de várias seleções.

Vejamos a consulta abaixo,
select rownum from dual
union all 
select rownum from dual

o resultado é
ROWNUM
1
1