Jediná věc, která mě napadá, protože jste na 12c, je udělat sloupec identity INVISIBLE
, jako je kód níže.
Problém je v tom, že získává %ROWTYPE
s ID je trochu obtížnější, ale je to proveditelné.
Samozřejmě to může také zmást ostatní uživatele vaší tabulky, že nevidí primární klíč!
Nemyslím si, že bych to udělal, ale je odpověď na vaši otázku, co to stojí za to.
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;