Điều duy nhất tôi có thể nghĩ đến, vì bạn đang ở tuổi 12c là tạo cột danh tính INVISIBLE
, giống như đoạn mã bên dưới.
Vấn đề là nó làm cho việc nhận %ROWTYPE
với id khó hơn một chút, nhưng nó có thể làm được.
Tất nhiên, nó cũng có thể gây nhầm lẫn cho những người khác đang sử dụng bảng của bạn là không thấy khóa chính!
Tôi không nghĩ mình sẽ làm điều này, nhưng nó là một câu trả lời cho câu hỏi của bạn, cho những gì đáng giá.
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;