Satu-satunya hal yang dapat saya pikirkan, karena Anda menggunakan 12c adalah membuat kolom identitas INVISIBLE
, seperti kode di bawah ini.
Masalahnya adalah itu membuat mendapatkan %ROWTYPE
dengan id sedikit lebih sulit, tapi bisa dilakukan.
Tentu saja, ini juga dapat membingungkan orang lain yang menggunakan tabel Anda untuk tidak melihat kunci utama!
Saya tidak berpikir saya akan melakukan ini, tetapi adalah jawaban atas pertanyaan Anda, untuk apa nilainya.
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;