こんにちは!土門大貴(daikidomon)です。
OracleDatabaseのデータ挿入SQL、「insert」文について紹介します。
「insert」文は、「update」、「delete」と同様にDML(Data Manipulation Language )と呼ばれ、データを操作するSQL文になります。
「insert」文は単純SQLですが、「insert into ~ select」文などテクニックもあり意外に奥が深いです。
この記事で「insert文」の基本的な使い方から、insert高速化のためのTIPSも紹介します。
基本構文:insert into ~ value
insert 文の基本構文は以下になります。
insert into <テーブル名> ( <列名①>, <列名②>, <列名③>... ) values ( <列①の値>, <列②の値>, <列③の値>... )
下がサンプルのinsert文になります。
create table EMPLOYEE ( EMPNO varchar2(10), NAME varchar2(20), SALARY number ); insert into EMPLOYEE ( EMPNO, NAME, SALARY ) values ( '00001', 'TARO TANAKA', 300000 ); select * from EMPLOYEE; EMPNO NAME SALARY ---------- ------------------------- ---------- 00001 TARO TANAKA 300000
またinsert文は全カラムを指定した場合、列名を省略して記載することができます。
insert into <テーブル名> values ( <列①の値>, <列②の値>, <列③の値>... )
下が全カラムを指定した場合のサンプルinsert文になります。
insert into EMPLOYEE values ( '00001', 'TARO TANAKA', 300000 );
表データをまとめて挿入:insert into ~ select
表データをまとめてinsertすることが出来るのが「insert into ~ select」で実施することができます。
insert into <テーブル名> select <列名>, <列名>, <列名>... from <ソースのテーブル名>;
以下がサンプルになります。
insert into EMPLOYEE select * from EMPLOYEE_BK;
もちろん列名を指定してinsertすることも出来ます。
insert into EMPLOYEE EMPNO, NAME, SALARY select EMPNO, NAME, SALARY from EMPLOYEE_BK;
ここでは記載しませんが、結合した表を1つの表へinsertすることもできます。
ダイレクト・パス・インサート:/*+ APPEND */
「insert into ~ select」など効果的なinsert方法に「ダイレクト・パス・インサート」があります。
ダイレクト・パス・インサートとは、データベースバッファを経由せずデータファイルへ直接データを書き込みます。
そのため、バッチ処理のように大量のデータを一括でinsertさせる時に大変性能が向上します。
ダイレクト・パス・インサートを使用するためにはヒント句「/*+ APPEND */」を使用します。
insert /*+ APPEND */ into <テーブル名> select * from <ソーステーブル名> ;
下が「/*+ APPEND */」を使用したサンプルです。
insert /*+ APPEND */ into EMPLOYEE_BK select * from EMPLOYEE ;