プライマリ・コンテンツに移動
Oracle® Database Oracleプリコンパイラのためのプログラマーズ・ガイド
12c リリース1 (12.1)
B71398-03
目次へ移動
目次
索引へ移動
索引

前
次

UPDATE (実行可能埋込みSQL)

UPDATEの用途

表またはビューの実表で既存の値を変更します。

UPDATEの前提条件

表またはスナップショットの値を更新するには、表が自分のスキーマにあるか、または表に対するUPDATE権限が必要です。

ビューの実表の値を更新するには、ビューが属するスキーマの所有者に、実表に対するUPDATE権限が必要です。また、ビューが自分以外のスキーマにある場合は、そのビューに対するUPDATE権限が必要です。

UPDATE ANY TABLEシステム権限があれば、どの表またはビューの実表でも値を更新できます。

OracleをDBMS MACモードで使用している場合は、DBMSラベルが表またはビューの作成ラベルと一致する必要があります。

  • 表またはビューの作成ラベルがDBMSラベルより上位にある場合は、READUPおよびWRITEUPシステム権限が必要です。

  • 表またはビューの作成ラベルがDBMSラベルより下位にある場合は、WRITEDOWNシステム権限が必要です。

  • 表またはビューの作成ラベルがDBMSラベルと同等でない場合は、READUPWRITEUPおよびWRITEDOWNシステム権限が必要です。

UPDATEの構文

UPDATEのキーワードおよびパラメータ

AT

UPDATE文の発行先のデータベースを指定します。次のいずれかを使用してデータベースを指定します。

db_nameは、DECLARE DATABASE文で事前に宣言したデータベース識別子。

:host_variableは、値が事前に宣言したdb_nameであるホスト変数。

この句を省略した場合、UPDATE文はデフォルトのデータベースに対して発行されます。

FOR :host_integer

SET句およびWHERE句に配列ホスト変数が含まれる場合に、UPDATE文を実行する回数を制限します。この句を省略した場合、Oracleは最小の配列の各コンポーネントにつき1回ずつ文が実行されます。

schema

表またはビューを含むスキーマ。schemaを省略した場合、Oracleは表またはビューがユーザーのスキーマ内にあるとみなします。

table view

更新する表の名前。viewを指定する場合、Oracleではビューのベース表を更新します。

dblink

表またはビューがあるリモート・データベースへのデータベース・リンクの完全または部分的な名前。Oracleを分散オプションで使用している場合にのみ、リモートの表またはビューを更新するためにデータベース・リンクを使用できます。

alias

文の他の場所にある表、ビューまたは副問合せを参照するために使用する名前。

column

表またはビューで更新する列の名前。SET句から表の列を省略すると、その列値は変更されないままです。

expr

対応する列に割り当てられた新しい値。この式には、ホスト変数およびオプションのインディケータ変数を含めることができます。

subquery_1

対応する列に割り当てられた新しい値を戻す副問合せ。

subquery_2

対応する列に割り当てられた新しい値を戻す副問合せ。

WHERE

表またはビューで更新する行を指定します。

conditionは、条件を満たす行のみを更新します。この条件には、ホスト変数およびオプションのインジケータ変数を含めることができます。

CURRENT OFは、cursorによって最後にフェッチされた行のみを更新します。cursorは、FOR UPDATE句により明示的に1つの表のみがロックされていないかぎり、結合を実行するSELECT文に関連付けることはできません。

この句を完全に省略した場合、Oracleは表またはビューのすべての行を更新します。

UPDATEの使用上の注意

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オプティマイザに渡すことができます。オプティマイザでは、このヒントを使用して文の実行計画が選択されます。

このコマンドの詳細は、埋込みSQLの使用方法およびトランザクションの定義および制御を参照してください。

UPDATEの例

次の例では、埋込み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';

UPDATEの関連トピック

DECLARE DATABASE(Oracle埋込みSQLディレクティブ)