行を挿入する

1行挿入する
行を挿入するには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'));

複数行insertする
insertでは、複数行を一度にinsertすることもできます。
以下のようにselect文を指定します。

insert into テーブル名
select * from 別のテーブル名 where ~~;
複数行insertする場合も列順序など合わせる必要があります。


異なるスキーマのテーブルレコードを挿入する
異なるスキーマのテーブルレコードをinsertするには、 スキーマ名.テーブル名 というようにテーブル名の前にスキーマ名を指定します。
現在のスキーマがscottとします。testというスキーマのテーブルレコードをinsertしたいとします。
以下、例です。

insert into scott.emp
select * from test.emp where ~~;


初版2005/10/22 :最終更新2008/09/30
HOME