ページの先頭行へ戻る
Symfoware Server V10.0.0 SQLリファレンス

3.66 UPDATE文:位置づけ

機能

カーソルによって位置づけられた1行を更新します。

記述形式

構文の構成

参照項番

権限

一般規則

表名
  • 更新する表の名前を指定します。

  • 表名で指定する表は、カーソル宣言のカーソル指定に指定されていることが必要です。

  • カーソル宣言のカーソル指定に導出表が記述されている場合、表名には導出表の元となる表を指定します。

  • 表名にOBJECT構造の表を指定することはできません。

  • 表名で指定した表が、“WITH CHECK OPTION”を指定したビュー表の場合、更新する値はビュー表の探索条件に対して真でなければなりません。そうでなければ、例外(WITH CHECK OPTIONに違反)となります。

設定句
  • 設定句で指定した列は、値式、NULL値または既定値に変更されます。

  • 設定句の値式に含まれる列指定が、UPDATE文:位置づけの対象となる表の列を指定しているとき、取り出される列の値は、更新される前の値です。

列名
  • 列名は、更新する列の名前を指定します。

  • 設定句に指定する列名は、表名で指定した表の列であることが必要です。また、同じ列名を複数回指定することはできません。

値式
  • 設定句で指定する値式に集合関数を指定することはできません。

  • 設定句で指定する値式のデータ型は、更新対象の列のデータ型に代入可能であることが必要です。

  • 更新対象の列のデータ型が文字列型で、値式のデータ型が真数型、概数型または日時型の場合、値式のデータを文字列型に暗黙的に型変換して代入します。

  • 更新対象の列のデータ型が真数型で、値式のデータ型が文字列型の場合、値式のデータを真数型に暗黙的に型変換して代入します。

  • 更新対象の列のデータ型が概数型で、値式のデータ型が文字列型の場合、値式のデータを概数型に暗黙的に型変換して代入します。

  • 更新対象の列のデータ型が日時型で、値式のデータ型が文字列型の場合、値式のデータを日時型に暗黙的に型変換して代入します。

列のデータ型が文字列型の場合:

値式のデータ型は文字列型、真数型、概数型または日時型であることが必要です。真数型/概数型または日時型が指定できるのは、値式を定数または変数指定で指定した場合のみです。

列のデータ型が各国語文字列型の場合:

値式のデータ型は各国語文字列型であることが必要です。

列のデータ型が真数型の場合:

値式のデータ型は真数型、概数型または文字列型であることが必要です。文字列型が指定できるのは、値式を定数または変数指定で指定した場合のみです。値式のデータ型が文字列型の場合、データは符号つき数定数の形式になるように指定してください。

1

UPDATE 会社管理.従業員表 SET 従業員番号 = '123' WHERE CURRENT OF CSR1
→ 文字列データ'123'を真数型に型変換して代入します。

2

UPDATE 会社管理.従業員表 SET 従業員番号 = 'F123' WHERE CURRENT OF CSR1
→ 結果はエラーとなります。文字列データは、符号つき数定数の形式で指定する必要があります。

列のデータ型が概数型の場合:

値式のデータ型は真数型、概数型または文字列型であることが必要です。文字列型が指定できるのは、値式を定数または変数指定で指定した場合のみです。値式のデータ型が文字列型の場合、データは符号つき数定数の形式になるように指定してください。

列のデータ型がDATE型の場合:

値式のデータ型は文字列型またはDATE型であることが必要です。文字列型が指定できるのは、値式を定数または変数指定で指定した場合のみです。値式のデータ型が文字列型の場合、データは日時定数の形式になるように指定してください。

1

UPDATE 会社管理.従業員表 SET 営業日 = '2007-01-02' WHERE CURRENT OF CSR1
→ 文字列データ'2007-01-02'をDATE型に型変換して代入します。

2

UPDATE 会社管理.従業員表 SET 営業日 = '2007/1/2' WHERE CURRENT OF CSR1
→ 結果はエラーとなります。文字列データは、日時定数の形式で指定する必要があります。

列のデータ型がTIME型の場合:

値式のデータ型は文字列型またはTIME型であることが必要です。文字列型が指定できるのは、値式を定数または変数指定で指定した場合のみです。値式のデータ型が文字列型の場合、データは日時定数の形式になるように指定してください。

列のデータ型がTIMESTAMP型の場合:

値式のデータ型は文字列型またはTIMESTAMP型であることが必要です。文字列型が指定できるのは、値式を定数または変数指定で指定した場合のみです。値式のデータ型が文字列型の場合、データは日時定数の形式になるように指定してください。

列のデータ型が時間隔型の場合:

値式のデータ型は文字列型、真数型または時間隔型であることが必要です。文字列型、真数型が指定できるのは、値式を変数指定で指定した場合のみです。真数型を指定する場合、更新対象の列のデータ型が単一日時フィールドで指定された時間隔型でなければなりません。

列のデータ型がBLOB型の場合:

値式のデータ型はBLOB型であることが必要です。

NULL
  • NULLを指定するときは、対応する列がNULL値を許していることが必要です。

DEFAULT
  • DEFAULTを指定する場合は、表定義時にDEFAULT句を設定していないと、NULLが設定されます。表定義時にDEFAULT句を指定していればそのDEFAULT値が設定されます。

対象列
  • 更新値が対象列に設定されるときの規則は次のようになります。

    文字列型データの場合:

    更新値の右側の空白を除くデータ長が対象列の長さと同じ場合は、文字データがそのまま設定されます。更新値の右側の空白を除くデータ長が対象列の長さよりも短い場合は、更新値が対象列の左側から設定され、対象列の残り部分には空白が設定されます。更新値の右側の空白を除くデータ長が対象列の長さよりも長い場合は、データ例外(文字データのトランケート)となります。

    各国語文字列型の場合:

    文字列型の場合と同じように設定されます。

    真数型の場合:

    対象列のデータ型に変換して設定されます。更新値の整数部が対象列の精度と位取りで表現できる場合は、対象列の精度と位取りに従って設定されます。上位の桁落ちが発生する場合は例外となり、下位の位が落ちる場合は切り捨てられます。

    概数型のデータの場合:

    対象列には、更新値の概数値が設定されます。

    日時型のデータの場合:

    対象列のデータ型に変換して設定されます。

    時間隔型のデータの場合:

    対象列のデータ型に変換して設定されます。ただし、時間隔型が年月の場合は年月のデータ型に、時間隔型が日時の場合は日時のデータ型にそれぞれ設定されます。

    BLOB型のデータの場合:

    対象列には、更新値のバイナリ値が設定されます。

カーソル名
  • カーソルの名前を指定します。

  • カーソル名は、同一コンパイル単位に含まれるカーソル宣言で定義されていることが必要です。

DESCRIBE情報について
  • 設定句の値式に動的パラメタ指定が指定された場合のDESCRIBE情報は、対応する列のデータ型になります。

使用例

表TBL1のカーソルが位置づけられている行を更新する例を示します。

UPDATE TBL1
       SET COL2 = 'A',COL3 = NULL
       WHERE CURRENT OF CSR1

CSR1は、このUPDATE文と同一コンパイル単位内で定義されたカーソルとします。現在、カーソルCSR1が位置づけられている行を更新します。