プライマリ・コンテンツに移動
Pro*C/C++プログラマーズ・ガイド
12c リリース1(12.1)
B71397-03
目次へ移動
目次
索引へ移動
索引

前
次

INSERT (実行可能埋込みSQL)

用途

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

前提条件

表に行を挿入するには、その表が自分のスキーマ内にあるか、またはその表に対してINSERTの権限を持っている必要があります。

ビューの実表に行を挿入するには、ビューが属するスキーマの所有者が、その実表に対してINSERTの権限を持っている必要があります。また、ビューがユーザーのスキーマ以外のスキーマ内にある場合は、ビューに対してINSERTの権限を持っている必要があります。

INSERT ANY TABLEシステム権限を使用すると、どの表またはビューの実表にも行を挿入できます。

構文

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

キーワードおよびパラメータ 説明

AT

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

db_name: DECLARE DATABASE文を使用して事前に宣言したデータベース識別子。

host_variable: 値がdb_nameのホスト変数。この句を省略した場合、INSERT文はデフォルトのデータベースに対して実行されます。

FOR :host_integer

integer

VALUES句に配列ホスト変数が含まれる場合に、文を実行する回数を制限します。

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

schema

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

table

view

行を挿入する表の名前。

ビューを指定すると、Oracleではそのビューの実表に行が挿入されます。

db_link

表またはビューがあるリモート・データベースへのデータベース・リンクの完全名または部分名。データベース・リンクの参照の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

Oracleを分散オプションで使用している場合にのみ、リモートの表またはビューに行を挿入できます。

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

part_name

表のパーティションの名前。

column

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

VALUES

表またはビューに挿入される値の行を指定します。構文については、『Oracle Database SQL言語リファレンス』を参照してください。式には、ホスト変数とオプションの標識変数を使用できます。VALUES句では、列のリストの各列に式を指定する必要があります。

subquery

表に挿入される行を戻す副問合せ。この副問合せの選択リストの列数は、INSERT文の列のリストの列数と同じであることが必要です。副問合せの構文については、『Oracle Database SQL言語リファレンス』のSELECTに関する項を参照してください。

DML RETURNING句

DML RETURNING句を参照してください。

使用上の注意

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

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

  • 最小の配列のサイズ

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

この文の詳細は、INSERT文を参照してください。

例1

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

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

例2

この例では、副問合せを使用した埋込みSQLのINSERT文を示します。

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

関連項目