プライマリ・コンテンツに移動
Oracle® Database Oracleプリコンパイラのためのプログラマーズ・ガイド
12c リリース1 (12.1)
B71398-03
目次へ移動
目次
索引へ移動
索引

前
次

INSERT (実行可能埋込みSQL)

INSERTの用途

表またはビューの実表に行を追加します。

INSERTの前提条件

表に行を挿入するには、表が自分のスキーマにあるか、または表に対するINSERT権限が必要です。

ビューの実表に行を挿入するには、ビューが属するスキーマの所有者に、実表に対するINSERT権限が必要です。また、ビューが自分以外のスキーマにある場合は、そのビューに対するINSERT権限が必要です。

INSERT ANY TABLEシステム権限があれば、どの表またはビューの実表にも行を挿入できます。

OracleをDBMS MACモードで使用している場合は、DBMSラベルが表またはビューの作成ラベルと一致する必要があります。

  • 表またはビューの作成ラベルがDBMSラベルより上位にある場合は、WRITEUPシステム権限が必要です。

  • 表またはビューの作成ラベルがDBMSラベルより下位にある場合は、WRITEDOWNシステム権限が必要です。

  • 表またはビューの作成ラベルがDBMSラベルと同等でない場合は、WRITEUPおよびWRITEDOWNシステム権限が必要です。

INSERTの構文

INSERTのキーワードおよびパラメータ

AT

INSERT文を実行するデータベースを指定します。次のいずれかを使用してデータベースを指定します。

db_nameは、DECLARE DATABASE文で事前に宣言したデータベース識別子。

:host_variableは、値が事前に宣言したdb_nameであるホスト変数。

この句を省略した場合、INSERT文はデフォルトのデータベースで実行されます。

FOR :host_integer

VALUES句に配列ホスト変数が含まれる場合に、文を実行する回数を制限します。この句を省略した場合、Oracleは最小の配列の各コンポーネントにつき1回ずつ文が実行されます。

schema

表またはビューを含むスキーマ。schemaを省略した場合、Oracleは表またはビューがユーザーのスキーマ内にあるとみなします。

table view

行を挿入する表の名前。viewを指定する場合、Oracleはビューの実表に行を挿入します。

dblink

表またはビューがあるリモート・データベースへのデータベース・リンクの完全または部分的な名前。Oracleを分散オプションで使用している場合にのみ、リモートの表またはビューに行を挿入できます。

dblinkを省略した場合、Oracleでは表またはビューがローカル・データベースにあるとみなされます。

column

表またはビューの列。挿入した行では、このリストの各列にVALUES句または問合せから値が割り当てられます。

このリストから表の列を削除する場合、挿入された行の列値は、表の作成時に指定した列のデフォルト値となります。列のリストを完全に省略した場合は、VALUES句または問合せで表のすべての列に値を指定する必要があります。

VALUES

表またはビューに挿入する値の表を指定します。ホスト変数には、オプションのインディケータ変数と合せて式も使用できます。VALUES句では、列リストの列ごとに式を指定する必要があります。

副問合せ

表に挿入される行を戻す副問合せ。この副問合せの選択リストの列数は、INSERT文の列リストの列数と同じであることが必要です。

INSERTの使用上の注意

WHERE句のホスト変数は、すべてがスカラーか、あるいはすべてが配列であることが必要です。変数がスカラーの場合、OracleではINSERT文が1回しか実行されません。変数が配列の場合は、配列のコンポーネントのセットごとにINSERT文が1回実行され、1行ずつ挿入されます。

WHERE句の配列ホスト変数は、サイズが異なっていてもかまいません。この場合、Oracleが文を実行する回数は、次のうちの小さい方の値によって決定します。

  • 最小の配列のサイズ

  • オプションのFOR句の:host_integerの値。

このコマンドの詳細は、埋込みSQLの使用方法を参照してください。

INSERTの例I

この例では、埋込みSQL INSERTコマンドの使用方法を示しています。

EXEC SQL 
 INSERT INTO emp (ename, empno, sal) 
 VALUES (:ename, :empno, :sal);

INSERTの例II

この例では、副問合せを使用した埋込みSQL INSERTコマンドを示しています。

EXEC SQL 
 INSERT INTO new_emp (ename, empno, sal) 
 SELECT ename, empno, sal FROM emp
 WHERE deptno = :deptno;

INSERTの関連トピック