[ Oracle ] CREATE SEQUENCE で自動インクリメント風の動作

Pocket

Oracle には MySQL や Postgresql のようにレコードを挿入すると自動的に値をインクリメントして挿入する機能はありません。ここでは、CREATE SEQUENCE 文でシーケンスを作成し、自動インクリメント風の動作をさせてみようと思います。レッツ挿入!

スポンサーリンク

サンプル SQL
-- テーブルの作成
CREATE TABLE table1
(
  col1 number, 
  col2 varchar2(255)
);

-- シーケンスの作成
CREATE SEQUENCE seq1
START WITH 1
INCREMENT BY 1
NOMAXVALUE; 

/*
 * この状態でレコードの挿入時はシーケンスから値を取得してインクリメントするようにする。
 */
INSERT INTO table1 (col1, col2) VALUES(seq1.nextval, 'col2'); 

参考 – CREATE SEQUENCE

2016-03-07 追記

Oracle12c からは IDENTITY 列がサポートされているとのコメントを aoi 様より頂きました。自動インクリメントも出来そうです。

Oracle 以外での自動インクリメント

Oracle 以外のデータベースで自動インクリメントをサポートしている代表的なデータベースについて、その定義(テーブル作成)方法を列挙していきます。

SQL Server ( IDENTITY プロパティ )
CREATE TABLE table1
(
 col1 int IDENTITY(1,1),
 col2 varchar (20)
);

参考 – IDENTITY (プロパティ) (Transact-SQL)

MySQL( auto_increment )
CREATE TABLE `table1` (
  `col1` int(10) unsigned NOT NULL auto_increment,
  `col2` varchar(100)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

参考 – AUTO_INCREMENT の使用

sqlite ( AUTOINCREMENT )
CREATE TABLE table1
(
  col1 INTEGER PRIMARY KEY AUTOINCREMENT,
  col2 VARCHAR(100)
);
Postgresql ( serial )
CREATE TABLE table1
(
  col1 serial NOT NULL,
  col2 character varying(100)
)
WITH (OIDS=FALSE);

参考 – PostgreSQL 7.3.2 ユーザガイド データ型

冒頭、ふざけて申し訳ありません。

 

スポンサーリンク


Pocket

2 thoughts on “[ Oracle ] CREATE SEQUENCE で自動インクリメント風の動作”

  1. aoi

    Oracleでも12cからはIDENTITY列がサポートされているみたいですね。

    https://docs.oracle.com/cd/E49329_01/server.121/b71327/chapter1.htm#AREANO02516
    Oracle Database新機能ガイド
    12cリリース1 (12.1)
    B71327-01
    ——————————————————————————–
    1.1.6.3 IDENTITY列
    表の列は、米国規格協会(ANSI)のSQLキーワードIDENTITYをサポートするように拡張されました。
    これにより、自動的に増分する列の宣言に標準ベースのアプローチが提供され、アプリケーションの開発が単純になり、DDLのOracleへの移行が簡単になります。
    ——————————————————————————–

    1. masao Post Author

      そうなんですか。初めて知りました。ありがとうございます。
      試す機会があれば、この記事も更新したいと思います。

Leave a Comment

Your email address will not be published. Required fields are marked *