sql >> データベース >  >> RDS >> Oracle

作成済みのテーブルへのOracleの自動インクリメント

    11g 以前に、シーケンスを作成します トリガーを使用して列をインクリメントします 。 12cより前のリリースの主キーの自動インクリメント(ID機能)を参照してください。

    たとえば、

    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.
    

    ID列が目的の値で自動インクリメントされているかどうかを確認しましょう-

    SQL> SELECT * FROM t;
    
            ID TEXT
    ---------- --------------------------------------------------
     150111111 auto-increment test 1
     150111112 auto-increment test 2
    
    SQL>
    

    したがって、ID列は値150111111で始まり、後続の挿入で1ずつ増加します。

    12c ID列を使用します 。 Oracle12cのIDENTITY列の自動インクリメント機能を参照してください。

    たとえば、

    IDENTITY COLUMN

    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.
    

    ID列が目的の値で自動インクリメントされているかどうかを確認しましょう-

    SQL> COLUMN text format A40
    SQL> SELECT * FROM t;
    
            ID TEXT
    ---------- ----------------------------------------
     150111111 This table has an identity column
    

    したがって、ID列は値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>
    

    ID列の詳細については、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. IDENTITY列を広げることによる影響の最小化–パート4

    2. OracleとSQLサーバーを使用したページングと一般的なページング方法

    3. 高度なInnoDB設定によるMySQLパフォーマンスの向上

    4. TSQLコードからWebサービスを呼び出すことはできますか?