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

Come utilizzare%ROWTYPE quando si inserisce nella tabella Oracle con la colonna Identity?

L'unica cosa che mi viene in mente, dato che sei su 12c, è rendere la colonna identità INVISIBLE , come il codice qui sotto.

Il problema è che fa ottenere un %ROWTYPE con l'id è un po' più difficile, ma è fattibile.

Ovviamente, potrebbe anche confondere altre persone che usano la tua tabella per non vedere una chiave primaria!

Non credo che lo farei, ma lo è una risposta alla tua domanda, per quel che vale.

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;