केवल एक चीज जिसके बारे में मैं सोच सकता हूं, क्योंकि आप 12c पर हैं, वह है पहचान कॉलम INVISIBLE
बनाना , नीचे दिए गए कोड की तरह।
समस्या यह है कि यह एक %ROWTYPE
. प्राप्त कर रहा है साथ आईडी थोड़ा और कठिन है, लेकिन यह संभव है।
बेशक, यह आपकी तालिका का उपयोग करने वाले अन्य लोगों को भी प्राथमिक कुंजी न देखने के लिए भ्रमित कर सकता है!
मुझे नहीं लगता कि मैं यह करूँगा, लेकिन यह है आपके प्रश्न का उत्तर, इसके लायक क्या है।
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;