Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie verwende ich %ROWTYPE beim Einfügen in eine Oracle-Tabelle mit Identitätsspalte?

Das einzige, was mir einfällt, da Sie auf 12c sind, ist, die Identitätsspalte INVISIBLE zu machen , wie der Code unten.

Das Problem ist, dass es einen %ROWTYPE erhält mit die id ein wenig schwieriger, aber es ist machbar.

Natürlich kann es auch andere Personen, die Ihre Tabelle verwenden, verwirren, wenn sie keinen Primärschlüssel sehen!

Ich glaube nicht, dass ich das tun würde, aber es ist eine Antwort auf Ihre Frage, was das wert ist.

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;