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;