11g . पर और इससे पहले, एक अनुक्रम create बनाएं ट्रिगर . के माध्यम से कॉलम को बढ़ाने के लिए . देखें 12c से पहले रिलीज़ (पहचान कार्यक्षमता) में प्राथमिक कुंजी को स्वतः बढ़ाएं
उदाहरण के लिए,
तालिका
SQL> CREATE TABLE t (
2 ID NUMBER(10) NOT NULL,
3 text VARCHAR2(50) NOT NULL);
Table created.
प्राथमिक कुंजी अनुक्रम द्वारा पॉप्युलेट किया जाना है
SQL> ALTER TABLE t ADD (
2 CONSTRAINT id_pk PRIMARY KEY (ID));
Table altered.
अनुक्रम प्राथमिक कुंजी का समर्थन करने के लिए
SQL> CREATE SEQUENCE t_seq
2 START WITH 150111111
3 INCREMENT BY 1;
Sequence created.
ट्रिगर यदि आप INSERT . में अनुक्रम नहीं रखना चाहते हैं , आप इसे TRIGGER के माध्यम से स्वचालित कर सकते हैं।
SQL> CREATE OR REPLACE TRIGGER t_trg
2 BEFORE INSERT ON t
3 FOR EACH ROW
4 WHEN (new.id IS NULL)
5 BEGIN
6 SELECT t_seq.NEXTVAL
7 INTO :new.id
8 FROM dual;
9 END;
10 /
Trigger created.
सम्मिलित करें
SQL> INSERT INTO t(text) VALUES('auto-increment test 1');
1 row created.
SQL> INSERT INTO t(text) VALUES('auto-increment test 2');
1 row created.
आइए देखें कि क्या हमारे पास वांछित मानों के साथ आईडी कॉलम ऑटो-इन्क्रीमेंटेड है-
SQL> SELECT * FROM t;
ID TEXT
---------- --------------------------------------------------
150111111 auto-increment test 1
150111112 auto-increment test 2
SQL>
इसलिए, आईडी कॉलम अब 150111111 के मान से शुरू होता है और बाद के इंसर्ट के साथ 1 से बढ़ता है।
12c . को , पहचान कॉलम . का उपयोग करें . Oracle 12c में पहचान कॉलम ऑटोइनक्रिकमेंट कार्यक्षमता देखें
उदाहरण के लिए,
तालिका पहचान कॉलम . के साथ
SQL> CREATE TABLE t
2 (
3 ID NUMBER GENERATED ALWAYS AS IDENTITY
4 START WITH 150111111 INCREMENT BY 1,
5 text VARCHAR2(50)
6 );
Table created.
सम्मिलित करें
SQL> INSERT INTO t
2 ( text
3 ) VALUES
4 ( 'This table has an identity column'
5 );
1 row created.
आइए देखें कि क्या हमारे पास वांछित मानों के साथ आईडी कॉलम ऑटो-इन्क्रीमेंटेड है-
SQL> COLUMN text format A40
SQL> SELECT * FROM t;
ID TEXT
---------- ----------------------------------------
150111111 This table has an identity column
इसलिए, आईडी कॉलम अब 150111111 के मान से शुरू होता है और बाद के इंसर्ट के साथ 1 से बढ़ता है।
Oracle एक sequence
बनाता है identity column
को पॉप्युलेट करने के लिए . आप इसे ISEQ$$
. नाम से पा सकते हैं
SQL> SELECT sequence_name,
2 min_value,
3 max_value,
4 increment_by
5 FROM user_sequences;
SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY
------------------------------ ---------- ---------- ------------
ISEQ$$_94087 1 1.0000E+28 1
SQL>
पहचान कॉलम के बारे में अधिक जानकारी के लिए ALL_TAB_IDENTITY_COLS
का उपयोग करें देखें।
SQL> SELECT table_name,
2 column_name,
3 generation_type,
4 identity_options
5 FROM all_tab_identity_cols
6 WHERE owner = 'LALIT'
7 ORDER BY 1,
8 2;
TABLE_NAME COLUMN_NAME GENERATION IDENTITY_OPTIONS
-------------------- ----------- ---------- ----------------------------------------------
T ID ALWAYS START WITH: 150111111, INCREMENT BY: 1,
MAX_VALUE:9999999999999999999999999999,
MIN_VALUE: 1, CYCLE_FLAG: N, CACHE_SIZE: 20,
ORDER_FLAG: N