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 ユーザガイド データ型
冒頭、ふざけて申し訳ありません。
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への移行が簡単になります。
——————————————————————————–
そうなんですか。初めて知りました。ありがとうございます。
試す機会があれば、この記事も更新したいと思います。