Oracle 12c
अब अंत में हमारे पास IDENTITY
है कई अन्य डेटाबेस की तरह कॉलम, जिसके मामले में दृश्यों के पीछे एक अनुक्रम स्वतः उत्पन्न होता है। यह समाधान ट्रिगर-आधारित समाधान की तुलना में बहुत तेज़ है जैसा कि इस ब्लॉग पोस्ट में देखा जा सकता है।
तो, आपका टेबल निर्माण इस तरह दिखेगा:
CREATE TABLE qname
(
qname_id integer GENERATED BY DEFAULT AS IDENTITY (START WITH 1) NOT NULL PRIMARY KEY,
qname VARCHAR2(4000) NOT NULL -- CONSTRAINT qname_uk UNIQUE
);
Oracle 11g और उससे नीचे
दस्तावेज़ीकरण के अनुसार, आप ऐसा नहीं कर सकते:
<ब्लॉककोट>डिफ़ॉल्ट कॉलम मानों पर प्रतिबंध एक DEFAULT अभिव्यक्ति में PL/SQL फ़ंक्शन या अन्य कॉलम, छद्म कॉलम CURRVAL, NEXTVAL, LEVEL, PRIOR, और ROWNUM, या दिनांक स्थिरांक जो पूरी तरह से निर्दिष्ट नहीं हैं, के संदर्भ शामिल नहीं हो सकते हैं।
Oracle में "ऑटो इंक्रीमेंट" कॉलम रखने का मानक तरीका ट्रिगर्स का उपयोग करना है, उदा.
CREATE OR REPLACE TRIGGER my_trigger
BEFORE INSERT
ON qname
FOR EACH ROW
-- Optionally restrict this trigger to fire only when really needed
WHEN (new.qname_id is null)
DECLARE
v_id qname.qname_id%TYPE;
BEGIN
-- Select a new value from the sequence into a local variable. As David
-- commented, this step is optional. You can directly select into :new.qname_id
SELECT qname_id_seq.nextval INTO v_id FROM DUAL;
-- :new references the record that you are about to insert into qname. Hence,
-- you can overwrite the value of :new.qname_id (qname.qname_id) with the value
-- obtained from your sequence, before inserting
:new.qname_id := v_id;
END my_trigger;
दस्तावेज़ में Oracle TRIGGERs के बारे में और पढ़ें