USER MANUALS

UPDATE ステートメント

UPDATE ステートメントでは、特定の条件を満たすビューのすべてのタプルで特定の属性値を変更し、基盤となるデータソースを直接更新できます。

UPDATE ステートメントの構文
UPDATE <view identifier>
    SET ( <field name> [, <field name> ]* ) = ( <value> [, <value> ]* )
    [ WHERE <condition> ]
    [ RETURNING <returning options>]
    [ CONTEXT ( <context information> [, <context information> ]* ) ]
    [ TRACE ]

UPDATE <view identifier>
    SET <field name> = <complex value> [, <field name> = <complex value> ]*
    [ WHERE <condition> ]
    [ RETURNING <returning options>]
    [ CONTEXT ( <context information> [, <context information> ]* ) ]
    [ TRACE ]

UPDATE <view identifier>
     SET ( <field name> [, <field name> ]* ) = ( <complex select> )
     [ WHERE <condition> ]
     [ RETURNING <returning options>]
     [ CONTEXT ( <context information> [, <context information> ]* ) ]
     [ TRACE ]

<field name> ::= <identifier>[.<identifier>]

<value> ::=
    NULL
  | <number>
  | <boolean>
  | <literal>
  | <field name>
  | <function>

<complex value> ::=
    <value>
  | <complex select>

<condition> ::=
    <condition> AND <condition>
  | <condition> OR <condition>
  | NOT <condition>
  | ( <condition> )
  | <value> <binary operator> <value> [ , <value> ]*
  | <value> <unary operator>

<returning options> ::=
  ALL GENERATED KEYS
  | ( <number> [, <number> ]* )
  | <field name> [, <field name> ]*

<view identifier> ::= (「 VQL ステートメントの基本エレメント 」を参照)

RETURNING 句の動作については、「 変更された行を返す 」を参照してください。

例 :

例 1

以下のステートメントは、 iinc_id の値が 6internet_inc ビューのタプルを更新し、属性 specific_field1specific_field2 の値に 10 を設定します。

UPDATE internet_inc
SET (specific_field1, specific_field2) = ('10', '10')
WHERE iinc_id = 6

このステートメントの実行結果として、ソースデータベース内の該当するタプルが、

internet_inc ビューに関連付けられたテーブル内で変更されます。

例 2

以下のように代替の構文を使用することもできます。

UPDATE internet_inc
SET specific_field1 = '10', specific_field2 = '10'
WHERE iinc_id = 6

例 3

JDBC データソースの場合、すべての行を更新するクエリを一意の JDBC データソースに委任できるときに 1 行のみを返すサブクエリから取得した値で internet_inc ビューのタプルを更新することもできます。

UPDATE internet_inc SET (specific_field1, specific_field2) =
  (SELECT B.rating, B.comments FROM internet_inc_rating B
        WHERE B.id = iinc_id and iinc_id = 6)

例 4

サブクエリは、ビューの単一フィールドにも適用できます。

UPDATE internet_inc SET
  specific_field1 = (SELECT B.rating FROM internet_inc_rating B
        WHERE B.id = iinc_id and iinc_id = 6),
  specific_field2 = 'literal_value'
WHERE
  (iinc_id, summary) in (SELECT B.iinc_id, B.summary FROM internet_inc_rating B
        WHERE B.summary = 'value_to_update')
Add feedback