sql >> Database >  >> RDS >> Oracle

Hoe %ROWTYPE gebruiken bij het invoegen in Oracle-tabel met identiteitskolom?

Het enige wat ik kan bedenken, aangezien je op 12c zit, is om de identiteitskolom INVISIBLE te maken , zoals de onderstaande code.

Het probleem is dat het het verkrijgen van een %ROWTYPE . maakt met de id een beetje moeilijker, maar het is te doen.

Het kan natuurlijk ook verwarrend zijn voor andere mensen die uw table gebruiken om geen primaire sleutel te zien!

Ik denk niet dat ik dit zou doen, maar het is een antwoord op je vraag, voor wat dat waard is.

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. Hoe de 'java.sql.SQLFeatureNotSupportedException' te corrigeren tijdens het gebruik van de methode createArrayOf()

  2. Schemalijst niet ophalen van bron bij migratie van MSSQL naar MySQL met Workbench

  3. Alle tabellen in een MySQL-database weergeven met PHP?

  4. Rij-ID van een SQLite FTS3-tabel ophalen