Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment utiliser %ROWTYPE lors de l'insertion dans la table Oracle avec la colonne d'identité ?

La seule chose à laquelle je peux penser, puisque vous êtes sur 12c, c'est de rendre la colonne d'identité INVISIBLE , comme le code ci-dessous.

Le problème est que cela rend l'obtention d'un %ROWTYPE avec l'id un peu plus difficile, mais c'est faisable.

Bien sûr, cela peut également perturber les autres utilisateurs de votre table de ne pas voir de clé primaire !

Je ne pense pas que je ferais ça, mais c'est c'est une réponse à votre question, pour ce que ça vaut.

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;