Oracle
 sql >> Database >  >> RDS >> Oracle

Colonna identità Oracle e inserisci in select

Credo che la query seguente funzioni, non l'ho testata!

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

Non sono sicuro, se ti può aiutare in qualche modo.

Per, GENERATED ALWAYS AS IDENTITY Oracle utilizza internamente solo una sequenza. E le opzioni sulla sequenza generale si applicano anche a questo.

NEXTVAL è usato per recuperare la successiva sequenza disponibile, e ovviamente è una pseudocolonna.

Quanto segue è di Oracle

Non puoi usare CURRVAL e NEXTVAL nei seguenti costrutti:

  • Una sottoquery in un DELETE , SELECT o UPDATE dichiarazione
  • Una query su una vista o su una vista materializzata
  • Un'istruzione SELECT con l'operatore DISTINCT
  • Un'istruzione SELECT con una clausola GROUP BY o una clausola ORDER BY
  • Un SELECT istruzione combinata con un altro SELECT dichiarazione con UNION, INTERSECT o MINUS operatore di impostazione
  • La clausola WHERE di un'istruzione SELECT
  • Valore DEFAULT di una colonna in un'istruzione CREATE TABLE o ALTER TABLE
  • La condizione di un vincolo CHECK

La subquery e SET la regola delle operazioni sopra dovrebbe rispondere alla tua domanda.

E per il motivo di NULL, quando pseudocolumn (ad es. NEXTVAL) viene utilizzato con un'operazione SET o qualsiasi altra regola sopra menzionata, l'output è NULL, poiché Oracle non è stato in grado di estrarli in effetti combinando più selezioni.

Vediamo la query qui sotto,

select rownum from dual
union all 
select rownum from dual

il risultato è

ROWNUM
1
1