用途
表またはビューの実表の既存の値を変更します。
前提条件
表またはスナップショットの値を更新するには、表がユーザーのスキーマ内にあるか、または表に対してUPDATEの権限を持っている必要があります。
ビューの実表の値を更新するには、ビューが属するスキーマの所有者が、実表に対してUPDATEの権限を持っている必要があります。また、ビューがユーザーのスキーマ以外のスキーマ内にある場合は、ビューに対してUPDATEの権限を持っている必要があります。
UPDATE ANY TABLEのシステム権限により、すべての表またはビューの実表の値も更新できます。
構文
DML RETURNING句は次のとおりです。
キーワードおよびパラメータ
キーワードおよびパラメータ | 説明 |
---|---|
AT |
UPDATE文の発行先のデータベースを識別します。次のいずれかを使用してデータベースを指定します。 dbname: DECLARE DATABASE文を使用して事前に宣言したデータベース識別子。 host_variable: 事前に宣言したdb_nameの値を持つホスト変数。 この句を省略した場合、UPDATE文はデフォルトのデータベースに対して発行されます。 |
FOR :host_integer integer |
SET句およびWHERE句が配列ホスト変数を含む場合に、UPDATE文を実行する回数を制限します。この句を省略した場合、Oracleは最小の配列の各コンポーネントにつき1回ずつ文が実行されます。 |
schema |
表またはビューを含むスキーマ。schemaを省略した場合、Oracleでは表またはビューが自分のスキーマ内にあるとみなされます。 |
table, view |
更新する表の名前。ビューを指定すると、Oracleではそのビューの実表が更新されます。 |
dblink |
表またはビューがあるリモート・データベースへのデータベース・リンクの完全または部分的な名前。データベース・リンクの参照の詳細は、Oracle Database SQL言語リファレンスを参照してください。データベース・リンクを使用してリモートの表またはビューを更新できるのは、Oracleで分散オプションを使用している場合のみです。 |
part_name |
表のパーティションの名前。 |
column |
表またはビューで更新する列の名前。SET句から表の列を削除する場合、その列の値は変更されません。 |
expr |
対応する列に割り当てる新しい値。この式には、ホスト変数およびオプションの標識変数を含めることができます。Oracle Database SQL言語リファレンスのexprの構文を参照してください。 |
subquery_1 |
対応する列に割り当てられた新しい値を戻す副問合せ。副問合せの構文は、『Oracle Database SQL言語リファレンス』のSELECTに関する項を参照してください。 |
subquery_2 |
対応する列に割り当てられた新しい値を戻す副問合せ。副問合せの構文は、『Oracle Database SQL言語リファレンス』のSELECTに関する項を参照してください。 |
WHERE |
更新される表またはビューの行を指定します。 |
condition CURRENT OF |
この条件がTRUEの行のみを更新します。この条件には、ホスト変数およびオプションのインジケータ変数を含めることができます。条件の構文は、『Oracle Database SQL言語リファレンス』を参照してください。 カーソルによって最後にフェッチされた行のみを更新します。結合を実行するSELECT文にカーソルを対応付けるには、FOR UPDATE句で明示的に1つの表のみをロックするほかに方法はありません。 この句を完全に省略した場合、表またはビューのすべての行が更新されます。 |
DML RETURNING句 |
DML RETURNING句を参照してください。 |
使用上の注意
SET句およびWHERE句に含まれるホスト変数は、すべてスカラーか、またはすべて配列であることが必要です。変数がスカラーの場合、OracleはUPDATE文を1回のみ実行します。変数が配列の場合、Oracleは配列のコンポーネント・セットごとに1回ずつこの文を実行します。1回の実行で、0行または1行、複数行を更新できます。
配列ホスト変数は、サイズが異なってもかまいません。この場合、Oracleが文を実行する回数は、次のうちの小さい方の値によって決定します。
最小の配列のサイズ
オプションのFOR句の:host_integerの値
更新された行の累積数は、SQLCAのSQLERRDコンポーネントの第3要素に設定されて戻されます。入力ホスト変数として配列を使用した場合、この数値はUPDATE文で処理された配列のすべてのコンポーネントにおよぶ更新数の合計を示します。この条件を満たす行が存在しない場合、行は更新されず、OracleはSQLCAのSQLCODE要素を通じてエラー・メッセージを戻します。WHERE句を省略した場合は、すべての行が更新され、OracleはSQLCAのSQLWARN要素の第5コンポーネントに警告フラグを設定します。
UPDATE文においてコメントを使用して、指示やヒントをオプティマイザに渡すことができます。オプティマイザは、これらのヒントを使用して文の実行計画を選択します。ヒントの詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。
例
次の例では、埋込みSQLのUPDATE文の使用方法を示します。
EXEC SQL UPDATE emp SET sal = :sal, comm = :comm INDICATOR :comm_ind WHERE ename = :ename; EXEC SQL UPDATE emp SET (sal, comm) = (SELECT AVG(sal)*1.1, AVG(comm)*1.1 FROM emp) WHERE ename = 'JONES';
関連項目