sql >> Databasteknik >  >> RDS >> Oracle

Hur använder man %ROWTYPE när man infogar i Oracle-tabell med identitetskolumn?

Det enda jag kan komma på, eftersom du är på 12c är att göra identitetskolumnen INVISIBLE , som koden nedan.

Problemet är att det får en %ROWTYPE med ID lite svårare, men det går.

Naturligtvis kan det också förvirra andra som använder din tabell att inte se en primärnyckel!

Jag tror inte att jag skulle göra det här, men det är ett svar på din fråga, för vad det är värt.

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. Hur väljer man unika värden från en tabell?

  2. Hur säkerhetskopierar och återställer jag PostgreSQL-databas i Windows7?

  3. Ogiltigt standardvärde för tidsstämpelfältet 'create_date'

  4. CONCAT med GROUP_CONCAT i mysql