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

Hvordan bruger man %ROWTYPE, når man indsætter i Oracle-tabel med identitetskolonne?

Det eneste jeg kan komme i tanke om, da du er på 12c, er at gøre identitetskolonnen INVISIBLE , ligesom koden nedenfor.

Problemet er, at det gør at få en %ROWTYPE med id'et er lidt sværere, men det kan lade sig gøre.

Det kan selvfølgelig også forvirre andre, der bruger din tabel, til ikke at se en primær nøgle!

Jeg tror ikke, jeg ville gøre dette, men det er et svar på dit spørgsmål, for hvad det er værd.

DROP TABLE t;

CREATE TABLE t ( id number invisible generated always as identity, 
                 val varchar2(30));

insert into t (val) values ('A');                 

DECLARE

  record_without_id t%rowtype;
  CURSOR c_with_id IS SELECT t.id, t.* FROM t;
  record_with_id c_with_id%rowtype;

BEGIN
  record_without_id.val := 'C';
  INSERT INTO t VALUES record_without_id;

  -- If you want ID, you must select it explicitly
  SELECT id, t.* INTO record_with_id FROM t WHERE rownum = 1;

  DBMS_OUTPUT.PUT_LINE(record_with_id.id || ', ' || record_with_id.val);
END;
/

SELECT id, val FROM t;    


  1. Postgresql - Ren måde at indsætte poster på, hvis de ikke eksisterer, opdater, hvis de gør

  2. Dynamisk oprettet SQL vs parametre i SQL Server

  3. JSON_QUERY() Eksempler i SQL Server (T-SQL)

  4. Hvordan sammenligner man datoer i sqlalchemy?