トップページ >  Oracle SQL >  行を挿入する
初版2005/10/22 : 最終更新日2006/07/29
  行を挿入する
目次
行を挿入する
セレクトインサート
ダイレクトパスインサート
行を挿入する
行を挿入するにはinsert文を使用します。

insert into テーブル名
(フィールド名、フィールド名) values (フィールド値、フィールド値)

というように書きます。これで行が1行挿入されます。
この時の注意点として、フィールド名の順序とフィールド値の順序が揃っている必要があります。
また、フィールド名には最低でもテーブルのキーが全て指定されていないといけません。
そうでないとキー値にNULLが挿入されることになりエラーとなるからです。

insert時に全ての列を指定する必要はなく、列を省略することができます。その場合、省略した列には null がセットされます。
ただし、テーブル定義作成時に、列にデフォルトで値を指定している場合は、nullはセットされずにデフォルト値がセットされます。

逆に、insertする時に全ての列に値を指定する場合は、フィールド名を省略することが出来ます。以下はフィールド名を省略したinsert文です。

insert into テーブル名
values (フィールド値、フィールド値)

このとき、フィールド値の順番は、テーブル作成時の列順序になります。
フィールド値のデータ型も一致している必要があります。文字列型は大文字小文字区別されシングルクォーテーション(')で囲む必要があります。
また日付型も同様にシングルクォーテーション(')で囲む必要があります。
日付型でややこしいのは日付書式もあわせる必要がある点です。書式を合わせるにはto_date関数を使用します。

insert into tbl_employee
(emp_id,birthday) values ('00001',to_date('1980-02-02','yyyy-mm-dd'));

セレクトインサート
select文の結果をそのままinsertする事が出来ます。
構文は

insert into テーブル名
select ...
from   テーブル名
where  条件

というように挿入したいテーブル名を書いてそのあとにselect文を記述するとセレクトインサートすることができます。
但し、インサートしたいテーブルとselect句のカラム数が合致している必要があります。

ダイレクトパスインサート
セレクトインサートする場合に限り、ヒント句でappendを指定する事が出来ます。
表から表にデータ移行する際に良く使用しますが、データベースバッファキャッシュを介さずにデータファイルにインサートされるので高速なインサートになります。
構文は

insert /*+ APPEND */ into テーブル名
select ...
from   テーブル名
where  条件

ダイレクトパスインサート実行時は、表ロックが起こります。