sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo usar %ROWTYPE al insertar en la tabla de Oracle con la columna de identidad?

Lo único que se me ocurre, dado que estás en 12c, es hacer que la columna de identidad sea INVISIBLE , como el siguiente código.

El problema es que hace que obtener un %ROWTYPE con la identificación es un poco más difícil, pero es factible.

¡Por supuesto, también puede confundir a otras personas que usan su tabla para no ver una clave principal!

No creo que haría esto, pero es una respuesta a tu pregunta, por lo que 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;