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;