ヘッダーをスキップ
Oracle TimesTen In-Memory Database SQLリファレンス・ガイド
リリース11.2.1
B56051-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

UPDATE

UPDATE文は、表のすべての行または検索条件を満たす行の1つ以上の列値を更新します。

必要な権限

表の所有者に必要な権限はありません。

別のユーザーの表の場合、UPDATEが必要です。

SQL構文

UPDATE文の構文は、次のとおりです。

UPDATE [FIRST NumRows]
{[Owner.]TableName [CorrelationName]}
SET {ColumnName =
{Expression1 | NULL | DEFAULT}} [,...]
[ WHERE SearchCondition ]
RETURNING|RETURN Expression2[,...] INTO DataItem[,...]

パラメータ

UPDATE文には、次のパラメータがあります。

パラメータ 説明
FIRST NumRows 更新する行の数を指定します。FIRST NumRowsは、副問合せの文ではサポートされていません。NumRowsには、正のINTEGERか動的パラメータのプレースホルダを指定する必要があります。動的パラメータのプレースホルダの構文は、?または:DynamicParameterです。動的パラメータの値は、文の実行時に設定されます。
[Owner.]TableName [CorrelationName] [ Owner.]TableNameには、更新する表を指定します。

CorrelationNameは、直前で指定した表へのシノニムを指定します。その表の列にアクセスする際、文の中で実際の表名ではなく相関名を使用します。相関名は、基本名の構文ルールを満たしている必要があります。「基本名」を参照してください。

単一のUPDATE文のすべての相関名は、一意である必要があります。

SET ColumnName 更新する列を指定します。 単一のUPDATE文で同じ表の複数の列を更新できます。主キー列の値が変更されないかぎり、更新された列のリストに主キー列を含めることができます。
Expression1 集計関数を含まない式。式は、更新操作に指定した行ごとに評価されます。 式のデータ型は、更新する列のデータ型と互換性がある必要があります。 値を更新する場合、Expression1には列、または順序CURRVALやNEXTVAL参照を指定できます。
NULL WHERE句を満たす各行の指定した列にNULL値を挿入します。NULL値可能な列である必要があります。
DEFAULT 列をデフォルト値で更新する必要があることを指定します。
WHERE SearchCondition 検索条件には副問合せを含めることができます。検索条件がTRUEとなる行はすべて、SET句の指定に従って更新されます。検索条件に一致しない行に影響はありません。検索条件に一致する行がない場合、表は変更されません。
Expression2 有効な式の構文。第3章「式」を参照してください。
DataItem 取得したExpression2値を格納するホスト変数またはPL/SQL変数。

説明

この例は、コストが$500を超える部品の価格を25%引き上げます。

UPDATE purchasing.parts
SET salesprice = salesprice * 1.25
WHERE salesprice > 500.00;

この例は、順序seqのNEXTVAL値を使用して列を更新します。

UPDATE student SET studentno = seq.NEXTVAL WHERE name = 'Sally';

次の問合せは、少なくとも1つの未出荷注文を持つすべての顧客のステータスを更新します。

UPDATE customers SET customers.status = 'unshipped'
WHERE customers.id = ANY
    (SELECT orders.custid FROM orders
        WHERE orders.status = 'unshipped');

idが主キーでない場合、次の文はすべての重複する注文を更新します。

UPDATE orders a
    WHERE EXISTS (SELECT 1 FROM orders b
        WHERE a.id = b.id AND a.rowid < b.rowid);

employees表内の'Jones'という姓の従業員について、job_idsalaryおよびdepartment_idを変更します。 変数に、salarylast_nameおよびdepartment_idの値を返します。

Command> VARIABLE bnd1 NUMBER(8,2);
Command> VARIABLE bnd2 VARCHAR2(25) INLINE NOT NULL;
Command> VARIABLE bnd3 NUMBER(4);
Command> UPDATE employees SET job_id='SA_MAN', salary=salary+1000,
       > department_id=140 WHERE last_name='Jones'
       > RETURNING salary*0.25, last_name, department_id
       > INTO :bnd1, :bnd2, :bnd3;
1 row updated.
Command> PRINT bnd1 bnd2 bnd3;
BND1                 : 950
BND2                 : Jones
BND3                 : 140

結合更新

TimesTenでは、結合更新文がサポートされています。結合更新を使用すると、副問合せの結果を使用して、表の列を1つ以上更新できます。

構文

UPDATE [Owner.]TableName
SET ColumnName=Subquery
 [WHERE SearchCondition]

または

UPDATE [Owner.]TableName
SET (ColumnName[,…])=Subquery
 [WHERE SearchCondition]

パラメータ

UPDATE文には、次のパラメータがあります。

パラメータ 説明
[Owner.]TableName [Owner.]TableNameには、更新する表を指定します。
SET (ColumnName[,...])= Subquery 更新する列を指定します。単一のUPDATE文で同じ表の複数の列を更新できます。この副問合せはネストできますが、SET句に含めることができる副問合せは1つのみです。

副問合せのSelectListの値の数は、SET句で指定された列数と同じである必要があります。副問合せが更新する行に対して2行以上返す場合は、エラーが返されます。

WHERE SearchCondition 検索条件には副問合せを含めることができます。検索条件がTRUEとなる行はすべて、SET句の指定に従って更新されます。検索条件に一致しない行に影響はありません。検索条件に一致する行がない場合、表は変更されません。

説明

結合更新のSET句内で副問合せを使用しても、更新されるターゲット表の行数は削減されません。この行数を削減するには、WHERE句を指定する必要があります。 したがって、WHERE句内でターゲット表の行が指定されているにもかかわらず、副問合せがこの行に対していずれの行も返さない場合、この行の更新対象列はNULL値に更新されます。

t1の行がt2と一致しない場合、最初の文のx1の値および2番目の文のx1y1の値はNULLに設定されます。

UPDATE t1 SET x1=(SELECT x2 FROM t2 WHERE id1=id2);
UPDATE t1 SET (x1,y1)=(SELECT x2,y2 FROM t2 WHERE id1=id2);

t2と一致するt1の行のみを更新するように更新を制限するには、副問合せを含むWHERE句を次のように指定する必要があります。

UPDATE t1 SET x1=(SELECT x2 FROM t2 WHERE id1=id2)
  WHERE id1 IN (SELECT id2 FROM t2);
UPDATE t1 SET (x1,y1)=(SELECT x2,y2 FROM t2 WHERE id1=id2)
  WHERE id1 IN (SELECT id2 FROM t2);

関連項目

「SELECT」