テーブルに新しい行を追加します。
Synopsis
INSERT restriction INTO table
     [(column-commalist)] query |
          [(column-commalist)] VALUES 
               (scalar-expression-commalist) |
          [(column-commalist)] VALUES host-variable |
          SET column = scalar-expression 
               {,column = scalar-expression}
引数
restriction オプション — キーワード %NOLOCK、%NOCHECK、%NOINDEX、%NOTRIGGER のうちの 1 つ、またはこれらキーワードのコンマで区切られたリスト。
table 挿入を実行するテーブル名あるいはビュー名
column-commalist 列のリスト。 コンマで区切ります。
query データとして提供されているクエリの結果セット
scalar-expression-commalist スカラ式のリスト。 コンマで区切ります。
host-variable ホスト変数 (以下参照)
column 値が設定されている行
scalar-expression 行の値のソースとして提供されているスカラ関数
概要
INSERT 文は、テーブルに新しい行を 1 つ追加します。テーブルに直接挿入、またはビュー経由で挿入できます。ビュー経由で挿入する場合は、CREATE VIEW で説明されているように、必要条件や制限事項に従います。
INSERT は全か無かのイベントです。列が完全に挿入されるか、またはまったく挿入されないかのどちらかとなります。Caché は、SQLCODE ステータス変数を返し、INSERT の成功もしくは失敗を示します。テーブルに行を挿入するには、以下の条件を満たしている必要があります。
列のリストを省略すると、INSERT は、すべての列が列番号順で挿入されるものと判断します。列のリストを指定すると、個々の値は、列のリスト内の列の名前と位置的に一致する必要があります。
INSERT オペレーションは、%ROWCOUNT 変数を、影響を受けた行の番号に設定します (必ず 0 または 1 のどちらか)。
制限引数
restriction 引数を指定すると、以下のように処理を制限します。
トランザクションでのロック
%NOLOCK を指定しない場合、Caché は、INSERTUPDATE、および DELETE 操作時に標準のロックを実行します。一意フィールドの値は、現行のトランザクションの間、ロックされます。ロックしきい値は、テーブルごとに 1000 ロックです。そのため、トランザクション時にテーブルから 1000 を超える一意フィールド値を挿入する場合は、ロックしきい値に到達し、Caché はロック・レベルを自動的に、一意フィールド値ロックからテーブル・ロックへと上げます。これによってトランザクション時に、ロック・テーブルをオーバーフローすることなく、大規模な挿入を実行できます。ロックの詳細は、このドキュメントの "SQL の概念" の "トランザクション" を参照してください。
以下の例は、Name、DOB、SSN の 3 つのフィールド値を持つ行を挿入します。
  &sql(INSERT INTO Sample.Person (Name,DOB,SSN) VALUES 
   ('David Vanderbilt', 46639,'123-45-6789'))
  WRITE !,"Error code=",SQLCODE,!,"Row count=",%ROWCOUNT
ホスト変数構文では、INSERT に値の配列を渡すために、最後の添え字が未定義の変数参照を使用できます。例えば以下のようになります。
   &sql(INSERT INTO Sample.Employee VALUES :emp("profile",))
   WRITE !,"SQL Error code: ",SQLCODE," Row Count: ",%ROWCOUNT
これは、挿入された "Employee" 行の各フィールドを以下のように設定します。
emp("profile",col)
ここでの "col" は、Sample.Employee テーブル内のフィールド列番号です。
以下の例は、SELECT クエリの結果を INSERT 文内へのデータ入力として使用する際の機能性を示しています。
INSERT INTO StudentRoster (NAME,GPA,ID_NUM)
     SELECT FullName,GradeAvg,ID
     FROM temp WHERE SchoolYear = '2004'
関連項目
ALTER TABLE CREATE TABLE DROP TABLE JOIN SELECT テーブル UPDATE VALUES