Det eneste jeg kan komme i tanke om, da du er på 12c, er at gøre identitetskolonnen INVISIBLE
, ligesom koden nedenfor.
Problemet er, at det gør at få en %ROWTYPE
med id'et er lidt sværere, men det kan lade sig gøre.
Det kan selvfølgelig også forvirre andre, der bruger din tabel, til ikke at se en primær nøgle!
Jeg tror ikke, jeg ville gøre dette, men det er et svar på dit spørgsmål, for hvad det er værd.
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;