Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

ऑरैकल में पहले से बनाई गई तालिका में ऑटोइनक्रिकमेंट

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL में किसी वर्ण की घटनाओं की संख्या की गणना करना

  2. पीएल/एसक्यूएल पैकेज-स्तरीय रिकॉर्ड प्रकारों के बारे में मेटाडेटा

  3. क्या अद्यतन के लिए चयन पंक्ति मौजूद नहीं होने पर अन्य कनेक्शन डालने से रोकता है?

  4. ओरेकल जबकि लूप उदाहरण

  5. TRIM () Oracle में फंक्शन