INSERT ステートメントを使用した行の挿入
表にデータを挿入する方法の 1 つは、SQL INSERT ステートメントを使用することです。 この方式は、少量のデータを挿入する場合、または別の表またはビューからデータを挿入する場合に便利です。
プロシージャー
表またはビューに新しい行を追加するには、
- 単一行に挿入する列値を指定します。 VALUES 文節を使用して、定数、ホスト変数、式、DEFAULT、 または NULL を指定できます。
- アプリケーション・プログラムで、 列値の配列を指定して、複数行を表に挿入します。 INSERT FOR nROWSステートメントのVALUES節でホスト変数配列を使って、列値の複数の行を表に追加します。
- INSERT ステートメントに SELECT ステートメントを組み込んで、別の表またはビューに新しい行または行のデータが含まれていることを Db2 に通知します。
いずれの場合も、挿入する行ごとに、デフォルト値を持たない列があれば、 その列に値を指定する必要があります。 以下のいずれかの条件を満たす列については、 DEFAULT を指定して、Db2にその列のデフォルト値を挿入するように指示します。
- この列は NULL 可能です。
- 列はデフォルト値を指定して定義されている。
- 列のデータ・タイプは ROWID である。 ROWID 列には必ずデフォルト値があります。
- 列は ID 列である。 ID 列には常にデフォルト値があります。
- 列は行変更タイム・スタンプ列である。
ROWID 列、ID 列、または行変更タイム・スタンプ列に挿入できる値は、その列が GENERATED ALWAYS または GENERATED BY DEFAULT のいずれで定義されているかどうかで決まります。
INSERT ステートメントの VALUES 文節を使用すれば、複数の列値から成る単一行を表に挿入できます。 値を指定する列のすべての名前を指定することも、 列名のリストを省略することもできます。 列名リストを省略する場合は、 列のすべての値を指定する必要があります。
- INSERT ステートメントが表の形式に左右され ない。 (例えば、列が表に追加される際、ステートメントの変更は不要です。)
- 値を順序どおりに指定しているかどうかが確認できる。
- ソース・ステートメントを読むだけで、処理の内容が理解しやすくなる。
静的 INSERT ステートメントで列名を指定せずに、ある列が表に追加された 場合は、INSERT ステートメントが再バインドされるとエラーが発生することが あります。 INSERT ステートメントを変更して新しい列の値を組み込まない限り、INSERT ステートメントの どの再バインド後にもエラーが発生することになります。 このことは、新しい列にデフォルト値がある場合でも該当します。
列名をリストする場合は、 それらに対応する値を列名のリストと同じ順序で指定しなければなりません。
INSERT文の例
次のステートメントは、 新しい部門に関する情報を YDEPT 表に挿入します。
INSERT INTO YDEPT (DEPTNO, DEPTNAME, MGRNO, ADMRDEPT, LOCATION) VALUES ('E31', 'DOCUMENTATION', '000010', 'E01', ' ');新しい部門行を YDEPT 表に挿入したら、SELECT ステートメントを使用して、 その表に何がロードされたかを見ることができます。 次の SQL ステートメントにより、 挿入した新しい部門行のすべてが表示されます。
SELECT * FROM YDEPT WHERE DEPTNO LIKE 'E%' ORDER BY DEPTNO;結果表は、以下の出力のようになります。
DEPTNO DEPTNAME MGRNO ADMRDEPT LOCATION ====== ==================================== ====== ======== =========== E01 SUPPORT SERVICES 000050 A00 ----------- E11 OPERATIONS 000090 E01 ----------- E21 SOFTWARE SUPPORT 000100 E01 ----------- E31 DOCUMENTATION 000010 E01 -----------次のステートメントは、 新しい従業員に関する情報を YEMP 表に挿入します。 WORKDEPT 列は外部キーなので、その列 (E31) に対して挿入される値は、主キー列の値、つまり YDEPT 表の DEPTNO であることが必要です。
INSERT INTO YEMP VALUES ('000400', 'RUTHERFORD', 'B', 'HAYES', 'E31', '5678', '1998-01-01', 'MANAGER', 16, 'M', '1970-07-10', 24000, 500, 1900);次のステートメントも、行を YEMP 表に挿入します。 指定されていない列では NULL 値が認証されるため、Db2 は指定しない列に NULL 値を挿入します。
INSERT INTO YEMP (EMPNO, FIRSTNME, MIDINIT, LASTNAME, WORKDEPT, PHONENO, JOB) VALUES ('000410', 'MILLARD', 'K', 'FILLMORE', 'D11', '4888', 'MANAGER');