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
の値が 6
の internet_inc
ビューのタプルを更新し、属性 specific_field1
と specific_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')