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

自動番号を作成するためのOracleトリガー

    このようなものは11gで動作します

    CREATE SEQUENCE t1_id_seq 
      start with 10000 
      increment by 1;
    
    CREATE TRIGGER trigger_name
      BEFORE INSERT ON t1
      FOR EACH ROW
    DECLARE
    BEGIN
      IF( :new.id IS NULL )
      THEN
        :new.id := t1_id_seq.nextval;
      END IF;
    END;
    

    以前のバージョンを使用している場合は、シーケンスから次の値を取得するためにSELECTINTOを実行する必要があります

    CREATE TRIGGER trigger_name
      BEFORE INSERT ON t1
      FOR EACH ROW
    DECLARE
    BEGIN
      IF( :new.id IS NULL )
      THEN
        SELECT t1_id_seq.nextval
          INTO :new.id
          FROM dual;
      END IF;
    END;
    

    Oracleシーケンスにはギャップがないわけではないことに注意してください。したがって、さまざまな理由で特定の値がスキップされる可能性があります。数分、数時間、または数日後に行われた場合、最初の挿入のIDは10000で、2番目の挿入のIDは10020である可能性があります。

    さらに、Oracleは、MySQLのようにVALUES句で複数の行を指定することをサポートしていないことに注意してください。だからではなく

    insert into t1 (firstname, lastname) values ('Michael','Jordan'),('Larry','Bird')
    

    2つの別々のINSERTステートメントが必要です

    insert into t1 (firstname, lastname) values ('Michael','Jordan');
    insert into t1 (firstname, lastname) values ('Larry','Bird');
    


    1. 古いMySQLバージョンのGroup_concat

    2. MYSQLで列を行に変換する必要があります

    3. Javaから4Dに接続する

    4. PL/pgSQLで「$$」は何に使用されますか