Hitachi

ノンストップデータベース HiRDB Version 10 SQLリファレンス


4.26.1 INSERT文 形式1の形式と規則

〈この項の構成〉

(1) 機能

表に,行を列単位で挿入します。直接,値を指定して一つの行の挿入ができます。また,問合せ式本体を使用して,一つ,又は複数の行の挿入もできます。

(2) 使用権限(形式1)

表に対するINSERT権限を持つユーザが,その表に行を挿入できます。

ただし,INSERT文中に問合せ指定を指定する場合は,その問合せ指定の表に対してSELECT権限が必要です。

(3) 形式1<列単位で表に行を挿入する>

 INSERT INTO 〔認可識別子.〕表識別子
    {〔(列名〔,列名〕…)〕
      {VALUES(挿入値〔,挿入値〕…)
     |問合せ式本体}
     |DEFAULT VALUES}
    〔WITH ROLLBACK〕
    〔WRITE IMMEDIATE〕
 
 問合せ式本体::={問合せ指定
           |(問合せ式本体)
           |問合せ式本体{UNION|EXCEPT}〔ALL〕
            {問合せ指定|(問合せ式本体)}}
 問合せ指定 ::=SELECT〔{ ALL | DISTINCT}〕{選択式〔,選択式〕…|*}表式
 表式    ::=FROM  表参照〔,表参照〕…
            〔WHERE 探索条件〕
            〔GROUP BY 値式〔,値式〕…〕
            〔HAVING 探索条件〕

(4) オペランド

(a) 〔認可識別子.〕表識別子

認可識別子

表の所有者の認可識別子を指定します。

認可識別子に,"MASTER"は指定できません。

表識別子

行を挿入する表の名称を指定します。

(b) 〔(列名〔,列名〕…)〕

データを挿入する列の名称の並びを指定します。

列名の並びを省略した場合は,表定義で表を定義したときの列の指定順序に従って,すべての列(予備列を除く)を指定したことになります。予備列には,予備列の定義長分の0x00が自動的に挿入されます。

列名についての規則を次に示します。

  1. 読み込み専用のビュー表は,行の挿入,更新,及び削除ができません。読み込み専用のビュー表については,「共通規則」を参照してください。

  2. ビュー表への行の挿入を指定した場合,そのビュー表の基の実表に行を挿入します。ビュー表の基の実表の列でビュー表の列に対応しない列はナル値になります。したがって,FIX属性の実表から定義したビュー表の場合,ビュー表の基の実表の列でビュー表の列に対応しない列があるときは行は挿入できません。

  3. 指定されていない列の値は列の規定値になります。DEFAULT句がある場合は,指定した既定値となります。DEFAULT句の指定がなく,WITH DEFAULTの指定がある場合は,WITH DEFAULTの既定値となります。DEFAULT句,及びWITH DEFAULTのどちらの指定もない場合,NULLが既定値となります。予備列の場合は予備列の定義長分の0x00になります。

  4. 指定されていない繰返し列の要素数は0になります。

  5. 列名には添字を指定できません。

  6. 列名には予備列を指定できません。

(c) VALUES(挿入値〔,挿入値〕…)

挿入値

列名で指定した各列に対応した挿入値を指定します。指定できる項目を次に示します。

  • 値式

  • NULL(ナル値を表します)

  • DEFAULT

  • ARRAY [要素の値〔,要素の値〕…]

注※

要素の値には,次の項目を指定できます。

  • 値式

  • NULL(ナル値を表します)

  • DEFAULT

挿入値についての規則を次に示します。

  1. 挿入値は,列名の指定順序に従って指定します。

  2. 挿入値にナル値を入れる場合は,NULLと指定します。

  3. 挿入値,又は挿入値の要素の値にDEFAULTを指定した場合,挿入の対象となる列の既定値を挿入します。DEFAULT句がある場合は,指定した既定値となります。DEFAULT句の指定がなく,WITH DEFAULTの指定がある場合は,WITH DEFAULTの既定値となります。DEFAULT句,及びWITH DEFAULTのどちらの指定もない場合,NULLが既定値となります。

  4. 挿入値に対応する列にSYSTEM GENERATEDを指定している場合,指定した挿入値は無視され,DATE型の場合は現在の日付(CURRENT_DATE),TIME型の場合は現在の時刻(CURRENT_TIME)を挿入します。

  5. PREPARE文で前処理する場合は,埋込み変数,標識変数を指定できません。

  6. 埋込み変数は,対応する列の列構造と同じ構造の埋込み変数を指定します。

  7. ?パラメタに値を指定するための埋込み変数の場合も,対応する列と同じ構造の埋込み変数を指定します。

  8. ARRAY [要素の値〔,要素の値〕…]は,対応する列が繰返し列の場合にだけ指定できます。要素の値は,最大30,000個指定できます。ただし,挿入する列の最大要素数以下にしてください。要素の値の埋込み変数(標識変数),?パラメタは,単純構造にしてください。

  9. 挿入値に列名又は集合関数を含む値式は指定できません。

  10. 挿入値にWRITE指定及びGET_JAVA_STORED_ROUTINE_SOURCE指定は指定できません。

(d) 問合せ式本体

::={問合せ指定
    |(問合せ式本体)
    |問合せ式本体{UNION|EXCEPT}〔ALL〕
     {問合せ指定|(問合せ式本体)}}

挿入するデータを取り出す問合せ式本体を指定します。

問合せ式本体については,「問合せ式」を参照してください。

(e) 問合せ指定::=SELECT〔{ ALL | DISTINCT}〕

{選択式〔,選択式〕…|*}表式

問合せ指定については,「問合せ指定」を参照してください。

取り出したデータを挿入する列が繰返し列の場合,その列に対応する問合せ指定の選択式には,添字なしで繰返し列を指定します。

(f) 表式

::=FROM  表参照〔,表参照〕…
 〔WHERE 探索条件〕
 〔GROUP BY 値式〔,値式〕…〕
 〔HAVING 探索条件〕

表式については,「表式」,表参照については,「表参照」,探索条件については,「探索条件」を参照してください。

(g) DEFAULT VALUES

挿入する行のすべての列に既定値を挿入します。

DEFAULT VALUESは,次の形式を指定する場合と同じ意味になります。

VALUES(DEFAULT,DEFAULT,…)

上記のDEFAULTの数は,挿入対象の表の列数と同じです。

(h) 〔WITH ROLLBACK〕

挿入の対象となる表が,ほかのユーザで使用されているときは,トランザクションを取り消して無効にする場合,指定します。

WITH ROLLBACKを省略した場合は,挿入の対象となる表が,ほかのユーザで使用されているとき,使用中のユーザのトランザクションが終了してから実行します。

(i) 〔WRITE IMMEDIATE〕

表オプションにWITHOUT ROLLBACKの指定がある表に対する更新処理で,更新完了時にシステムログを書き出す場合,このオプションを指定してください。WITHOUT ROLLBACK指定のない表に対して,このオプションを指定しても無効になります。

更新完了時にシステムログを書き出す効果については,マニュアル「HiRDB UAP開発ガイド」の採番業務で使用する表を参照してください。

(5) 共通規則

  1. 埋込み変数,SQL変数,又はSQLパラメタのデータ型は対応する列のデータ型,又は変換できるデータ型にしてください。

  2. INSERT文で?パラメタが指定できるのは,PREPARE文で前処理された場合だけです。?パラメタに対して与える値は,前処理したPREPARE文に対応するEXECUTE文のUSING句の埋込み変数で指定します。

  3. 埋込み変数,標識変数は,PREPARE文で前処理されるINSERT文,及びSQL手続き中では使用できません。

    SQL手続き中では,SQL変数,又はSQLパラメタを使用します。Java手続き中の指定値については,マニュアル「HiRDB UAP開発ガイド」のJDBCドライバ又はSQLJを参照してください。

  4. 挿入する1行分の列の個数は,列名で指定した列の個数と同じにしてください。

    また,それらの値は,列のデータ型,又は変換できるデータ型にしてください(ただし,データを挿入する列が各国文字データ型で,挿入値に文字列定数を指定した場合,文字列定数を各国文字列定数とみなします。文字列定数を各国文字列定数とみなした場合,文字コードはチェックされないで,文字データの長さだけがチェックされます)。複数の行を挿入する場合,問合せ式本体で検索する列の個数と列名で指定した列の個数を同じにしてください。また,対応する列のデータ型は変換できるデータ型にしてください(ただし,データを挿入する列が各国文字データ型で,問合せ式本体の選択式に文字列定数を指定した場合,文字列定数を各国文字列定数とみなします。文字列定数を各国文字列定数とみなした場合,文字コードはチェックされないで,文字データの長さだけがチェックされます)。

  5. 固定小数点,又は浮動小数点のデータを次に示すデータ型の列に挿入する場合は,端数(小数)部分は切り捨てられます。

    • INTEGER

    • SMALLINT

    また,固定小数点のデータをDECIMAL型の列に挿入する場合は,列の位取りより下位のけた部分が切り捨てられます。

  6. 表を定義したときに指定した長さ以上の文字データは,挿入できません。

  7. 列に定義されているデータ型の範囲外の数データは,挿入できません。

  8. 固定長文字列(各国文字列,及び混在文字列を含む)の列に挿入するデータが,列の長さより短い場合は,左詰めに挿入され,余りの部分に空白が設定されます。

  9. データ型がBLOBの列にデータを挿入する場合,挿入値には,埋込み変数,?パラメタ,SQL変数,SQLパラメタ,スカラ関数SUBSTR,関数呼出し,又はNULLが指定できます。

  10. 抽象データ型の列にデータを挿入する場合,挿入値には埋込み変数及び?パラメタは指定できません。

  11. 問合せ式本体の選択式にコンポネント指定は指定できません。

  12. 抽象データ型の列にデータを挿入する場合,挿入値には,表定義時にLOB属性格納用RDエリア名を指定していないBLOB属性を含む抽象データ型の値は指定できません。

  13. 問合せ式本体の選択式には,WRITE指定及びGET_JAVA_STORED_ROUTINE_SOURCE指定は指定できません。

  14. WITHOUT ROLLBACKを指定した表に対して,INSERT文を実行する場合,インデクスの定義有無によって行排他の解除タイミングが異なります。詳細は「CREATE TABLE(表定義)」のWITHOUT ROLLBACKの規則を参照してください。

  15. 共用表にデータを挿入する場合,事前にその表に対するLOCK文を排他モードで実行してください。LOCK文を実行しないで共用表にデータ挿入した場合,エラーとなります。共用表に対する更新については,マニュアル「HiRDB システム導入・設計ガイド」を参照してください。共用表に対してLOCK文を実行した場合の排他制御の対象については「LOCK文(表の排他制御)」の留意事項を参照してください。

  16. 文字データ型の列にデータを挿入する場合,挿入対象の列と,対応する挿入値の文字集合を同じにしてください。ただし,挿入値が埋込み変数(既定文字集合),?パラメタ,又は文字列定数の場合,自動的に挿入対象の列の文字集合に変換します。

(6) 参照制約に関する規則

  1. 被参照表,参照表に行を挿入する場合の規則は「CREATE TABLE(表定義)」の参照動作の説明を参照してください。

(7) 使用例

  1. 在庫表(ZAIKO)のすべての列に,埋込み変数に読み込まれた値の行を挿入します。

    INSERT INTO ZAIKO
        VALUES(:XSCODE,:XSNAME,:XCOL,
                :XTANKA,:XZSURYO)
  2. 在庫表(ZAIKO)の商品コード(SCODE)列,商品名(SNAME)列,在庫量(ZSURYO)列の各列に,埋込み変数に読み込まれた値の行を挿入します。

    INSERT INTO ZAIKO
        (SCODE,SNAME,ZSURYO)
        VALUES(:XSCODE,:XSNAME,:XZSURYO)
  3. 在庫表(ZAIKO)に在庫表と同じ列定義情報を持つ在庫表2(ZAIKO2)のすべての表データを挿入します。

    INSERT INTO ZAIKO
        SELECT * FROM ZAIKO2
  4. 在庫表(ZAIKO)の商品コード(SCODE),商品名(SNAME),色(COL)の各列に,612S,ズボン,白のデータを挿入します。

    INSERT INTO ZAIKO(SCODE,SNAME,COL)
        VALUES(‘612S’,N’ズボン’,N’白’)
  5. 受注表(JUTYU)の各列に,02561,TT001,302S,50,現在の日付(CURRENT_DATE),現在の時刻(CURRENT_TIME)を挿入します。

    INSERT INTO JUTYU
        VALUES(‘02561’,’TT001’,’302S’,50,CURRENT_DATE,CURRENT_TIME)