UPDATE (日本語)
目的
UPDATE
ステートメントを使用して、テーブルまたはビューのベーステーブルの既存の値を変更します。マテリアライズドビューのマスターテーブル。
追加トピック
-
前提条件
-
構文
-
セマンティクス
-
例
前提条件
の場合テーブルの値を更新するには、テーブルが独自のスキーマにあるか、テーブルに対するUPDATE
オブジェクト権限を持っている必要があります。
更新するにはビューのベーステーブルの値:
-
ビューに対する
UPDATE
オブジェクト権限が必要です。 -
ビューを含むスキーマを所有する人は、ベーステーブルに対する
UPDATE
オブジェクト権限を持っている必要があります。
UPDATE
ANY
TABLE
システム権限では、任意の値を更新することもできます。テーブルまたはベーステーブル
次の場合は、更新するオブジェクトに対するSELECT
オブジェクト権限も必要です。
-
オブジェクトがリモートデータベース上にあるか、
-
SQL92_SECURITY
初期化パラメーターがTRUE
およびUPDATE
操作は、where_clause
の列などのテーブル列を参照します。
構文
update :: =
図の説明update.gif
(DML_table_expression_clause :: =、update_set_clause :: =、where_clause :: =、returning_clause :: =、error_logging_clause :: =)
DML_table_expression_clause :: =
図の説明DML_table_expression_clause.gif
(subquery :: = -SELECTの一部、subquery_restriction_clause :: =、table_collection_expression :: =)
subquery_restriction_clause :: =
イラストの説明subquery_restriction_clause.gif
table_collection_expression :: =
イラストの説明table_collection_expression.gif
update_set_clause :: =
イラストの説明update_set_clause。 gif
where_clause :: =
イラストの説明where_clause.gif
returning_clause :: =
イラストの説明returning_clause.gif
error_logging_clause :: =
イラストの説明error_logging_clause.gif
セマンティクス
ヒント
コメントを指定これは、ステートメントの実行計画を選択する際の命令をオプティマイザに渡します。
UPDATE
キーワードの直後に並列ヒントを配置して、嘘つきスキャンおよびUPDATE
操作。
関連項目:
-
Oracle Database Performance TuningGuideおよび “ヒントの構文と説明については「ヒントの使用」
-
並列DMLの詳細については、 『Oracle Databaseパフォーマンスチューニングガイド』および 『Oracle Database Concepts』を参照してください。 >
DML_table_expression_clause
ONLY
句はビューにのみ適用されます。 UPDATE
句のビューが階層に属するビューであり、どの行からも行を更新したくない場合は、ONLY
構文を指定します
関連項目:
「DML_table_expression_clauseの制限」および「テーブルの更新:例」
スキーマ
更新するオブジェクトを含むスキーマを指定します。 schema
を省略すると、データベースはオブジェクトが独自のスキーマにあると見なします。
table |ビュー| materialized_view | subquery
更新するサブクエリによって返されるテーブル、ビュー、マテリアライズドビュー、または列の名前を指定します。テーブルに対してUPDATE
ステートメントを発行すると、テーブルに関連付けられているUPDATE
トリガーが起動します。
-
view
を指定すると、データベースはビューのベーステーブルを更新します。ビューの定義クエリに次のいずれかの構成が含まれている場合、INSTEAD
OF
トリガーを使用する場合を除いてビューを更新することはできません。
集合演算子ADISTINCT
演算子集計または分析関数AGROUP
BY
、ORDER
BY
、MODEL
、CONNECT
BY
、またはSTART
WITH
句のコレクション式SELECT
リストSELECT
リスト内のサブクエリWITH READ ONLY
で指定されたサブクエリは、いくつかの例外を除いて結合します。 、 『Oracle Database管理者ガイド』に記載されているように
-
ビューから複数のベーステーブルを更新することはできません。
-
さらに、ビューは
WITH
CHECK
の場合、結果のデータがビューの定義クエリを満たしている場合にのみ、ビューを更新できます。 -
table
またはview
のベーステーブルに1つ以上のドメインインデックス列が含まれている場合、このステートメントは適切なインデックスタイプ更新ルーチンを実行します。 -
読み取り専用のマテリアライズドビューの行を更新することはできません。書き込み可能なマテリアライズドビューの行を更新すると、データベースは基になるコンテナテーブルの行を更新します。ただし、更新は次の更新操作で上書きされます。マテリアライズド・ビュー・グループの一部である更新可能なマテリアライズド・ビューの行を更新すると、データベースはマスター表の対応する行も更新します。
参照また:
-
インデックスタイプ更新ルーチンの詳細については、 『Oracle Data Cartridge Developer’s Guide』を参照してください。
-
に関する情報については、CREATE MATERIALIZEDVIEW更新可能なマテリアライズド・ビューの作成
PARTITION | SUBPARTITION
table
更新の対象。パーティション表の値を更新するときにパーティション名を指定する必要はありません。ただし、複雑なwhere_clause
よりもパーティション名を指定する方が効率的な場合があります。 。
関連項目:
「パーティション化されたテーブルとインデックスの参照」および「パーティションの更新:例」
dblink
指定リモートデータベースへのデータベースリンクの完全または部分的な名前。ここで、tオブジェクトが見つかりました。 Oracle Database分散機能を使用している場合にのみ、データベースリンクを使用してリモートオブジェクトを更新できます。
dblink,
を省略すると、データベースはオブジェクトがローカルデータベース上。
関連項目:
データベースリンクの参照については、「リモートデータベース内のオブジェクトの参照」
subquery_restriction_clause
subquery_restriction_clause
を使用して、次のいずれかの方法でサブクエリを制限します。
読み取り専用WITH READ ONLY
を指定します。テーブルまたはビューを更新できないことを示します。
チェックオプション付きWITH CHECK OPTION
を指定して、Oracleデータベースがテーブルまたはビューへの変更を禁止することを示します。サブクエリに含まれていない行。 DMLステートメントのサブクエリで使用する場合、この句はFROM
句のサブクエリで指定できますが、WHERE
句。
CONSTRAINT制約CHECK OPTION
制約の名前を指定します。この識別子を省略すると、Oracleは制約にSYS_C
n
という形式の名前を自動的に割り当てます。ここで、nはデータベース内で一意の制約名。
関連項目:
「WITHCHECKOPTION句の使用:例」
table_collection_expression
table_collection_expression
を使用すると、collection_expression
の値をクエリおよびDML操作の目的でテーブルとして扱う必要があることをOracleに通知できます。 collection_expression
は、サブクエリ、列、関数、またはコレクションコンストラクターにすることができます。その形式に関係なく、コレクション値、つまり、型がネストされたテーブルまたは変数である値を返す必要があります。コレクションの要素を抽出するこのプロセスは、コレクションのネスト解除と呼ばれます。
TABLE
式を親と結合する場合は、オプションのプラス(+)が関係します。テーブル。 +は、2つの外部結合を作成するため、コレクション式がnullの場合でも、クエリは外部テーブルから行を返します。
注:
Oracleの以前のリリースでは、 collection_expression
がサブクエリの場合、table_collection_expression
はTHE
subquery
。この使用法は非推奨になりました。
table_collection_expression
を使用して、別のテーブルの行に基づいて1つのテーブルの行を更新できます。たとえば、4つの四半期売上テーブルを1年売上テーブルにロールアップできます。
t_alias
参照するテーブル、ビュー、またはサブクエリの相関名(エイリアス)を指定します。ステートメントの他の場所。このエイリアスは、DML_table_expression_clause
がオブジェクトタイプの属性またはオブジェクトタイプのメソッドを参照する場合に必要です。
関連項目:
「関連する更新:例”
DML_table_expression_clauseの制限この句には、次の制限があります。
-
table
またはview
のベーステーブルには、IN_PROGRESS
またはFAILED
とマークされたドメインインデックスが含まれています。 -
影響を受けるインデックスパーティションが
UNUSABLE
とマークされている場合、パーティションに挿入することはできません。 -
DML_table_expression_clause
のサブクエリでorder_by_clause
を指定することはできません。 -
UNUSABLE
とマークされたインデックス、インデックスパーティション、またはインデックスサブパーティションを指定した場合、UPDATE
ステートメントは、SKIP_UNUSABLE_INDEXES
セッションパラメータTRUE
に設定されています。
関連項目:
セッションパラメータ
update_set_clause
update_set_clause
を使用すると、列の値を設定できます。
column
更新するオブジェクトの列の名前を指定します。 update_set_clause
からテーブルの列を省略した場合、その列の値は変更されません。
column
はLOBオブジェクト属性を参照しているため、最初に空またはnullの値で初期化する必要があります。リテラルで更新することはできません。また、直接のUPDATE
SQLステートメント以外の方法を使用してLOB値を更新する場合は、最初にLOBを含む行をロックする必要があります。詳細については、for_update_clauseを参照してください。
column
がパーティションテーブルのパーティションキーの一部である場合、UPDATE
行の移動を有効にしない限り、行を別のパーティションまたはサブパーティションに移動する列の値を変更すると失敗します。 CREATETABLEまたはALTERTABLEのrow_movement_clause
を参照してください。
さらに、column
がリストパーティションテーブルのパーティションキーの場合、partition_value
divにまだ存在しない列の値を指定すると、UPDATE
は失敗します。 >パーティションの1つのリスト。
サブクエリ
更新された行ごとに正確に1つの行を返すサブクエリを指定します。
-
If
update_set_clause
で1つの列のみを指定すると、サブクエリは1つの値のみを返すことができます。 -
update_set_clause
の場合、サブクエリは指定した列と同じ数の値を返す必要があります。 -
サブクエリが行を返さない場合は、列にはnullが割り当てられます。
-
この
subquery
がリモートオブジェクトを参照している場合、UPDATE
操作は、参照元がceは、ローカルデータベース上のオブジェクトにループバックしません。ただし、DML_table_expression_clause
のsubquery
がリモートオブジェクトを参照している場合、UPDATE
操作は通知なしでシリアルに実行されます。
サブクエリ内でflashback_query_clause
を使用して、過去のデータ。この句の詳細については、SELECT
のflashback_query_clauseを参照してください。
関連項目:
-
SELECTと「サブクエリの使用」
-
CREATETABLEドキュメントのparallel_clause
expr
対応する列に割り当てられた新しい値に解決される式を指定します。
関連項目:
第6章「式」expr
および “オブジェクトテーブルの更新:例”
DEFAULT DEFAULT
を指定して、列を以前にデフォルトとして指定した値に設定します列の値。対応する列のデフォルト値が指定されていない場合、データベースは列をnullに設定します。
デフォルト値への更新の制限DEFAULT
ifビューを更新しています。
VALUE句
VALUE
句を使用すると、オブジェクトテーブルの行全体を指定できます。
VALUE句の制限この句は、オブジェクトテーブルに対してのみ指定できます。
注:
文字列リテラルをRAW
列に挿入すると、後続のクエリ中にOracleDatabaseは全表スキャンを実行します。 RAW
列に存在する可能性のあるインデックスを使用するのではなく。
関連項目:
「オブジェクトテーブルの更新:例」
where_clause
where_clause
を使用すると、更新される行を、指定されたcondition
は本当です。この句を省略すると、データベースはテーブルまたはビューのすべての行を更新します。 condition
の構文については、第7章「条件」を参照してください。
where_clause
は次の行を決定しますどの値が更新されるか。 where_clause
を指定しない場合、すべての行が更新されます。 where_clause
を満たす各行について、update_set_clause
の等式演算子(=)の左側の列が値に設定されます演算子の右側にある対応する式の。式は、行が更新されるときに評価されます。
returning_clause
return句は、DMLステートメントの影響を受ける行を取得します。この句は、テーブルとマテリアライズドビュー、および単一のベーステーブルを持つビューに対して指定できます。
単一の行を操作する場合、returning_clause
を含むDMLステートメント影響を受ける行、ROWID、および影響を受ける行へのREFs
を使用して列式を取得し、それらをホスト変数またはPL / SQL変数に格納できます。
操作時複数の行の場合、returning_clause
を含むDMLステートメントは、式、ROWID、およびバインド配列内の影響を受ける行を含むREFs
からの値を格納します。
expr expr
リストの各項目は有効な式構文である必要があります。
INTO INTO
句は、変更された行の値がdata_item
リストで指定された変数に格納されることを示します。
data_item各data_item
は、取得したexpr
値を格納するホスト変数またはPL / SQL変数です。
RETURNING
リストの式ごとに、対応するタイプ互換のPL / SQL変数またはホスト変数をINTO
リスト。
制限事項RETURNING
句には次の制限事項が適用されます。
-
expr
は次のように制限されています。-
UPDATE
およびDELETE
各expr
ステートメントは、単純な式または単一セットの集計関数式である必要があります。同じreturning_clause
で単純な式と単一セットの集計関数式を組み合わせることはできません。INSERT
ステートメントの場合、各expr
は単純な式である必要があります。集計関数は、INSERT
ステートメントRETURNING
句ではサポートされていません。 -
単一- setaggregate関数式に
DISTINCT
キーワードを含めることはできません。
-
-
リストに主キー列またはその他の
NOT
NULL
列が含まれている場合、テーブルにBEFORE
UPDATE
トリガーが定義されています。 -
マルチテーブル挿入の場合。
-
この句を並列DMLまたはリモートオブジェクトで使用することはできません。
-
この句を使用して
LONG
タイプを取得することはできません。 -
この句をビューに指定することはできません。
INSTEAD
OF
トリガーが定義されています。
関連項目:
PL / SQLユーザー」 ■BULK
COLLECT
句を使用してコレクション変数に複数の値を返す方法についてのガイドとリファレンス
error_logging_clause
error_logging_clauseは、UPDATE
ステートメントでもINSERT
ステートメントと同じ動作をします。詳細については、INSERT
ステートメントerror_logging_clauseを参照してください。
関連項目:
「エラーログを使用したテーブルへの挿入:例」
例
テーブルの更新:例次の例このステートメントは、仕事をしているすべての従業員にnullコミッションを与えますSH_CLERK
:
UPDATE employees SET commission_pct = NULL WHERE job_id = "SH_CLERK";
次のステートメントは、ダグラスグラントをマネージャーに昇格させます部門20の1,000ドルの昇給:
UPDATE employees SET job_id = "SA_MAN", salary = salary + 1000, department_id = 120 WHERE first_name||" "||last_name = "Douglas Grant";
次のステートメントは、employees
の従業員の給与を増やします。 remote
データベースのテーブル:
UPDATE employees@remote SET salary = salary*1.1 WHERE last_name = "Baer";
次の例は、UPDATE
ステートメント:
-
update_set_clause
の両方の形式を1つのステートメントにまとめた -
相関サブクエリ
-
where_clause
更新された行を制限する
前述のUPDATE
ステートメントは次の操作を実行します。
-
ジュネーブまたはミュンヘン(場所2900および2700)で働く従業員のみを更新します
-
セット
department_id
これらの従業員はボンベイに対応するdepartment_id
(location_id
2100) -
各従業員の給与を部門の平均給与の1.1倍に設定します
-
各従業員の手数料を部門の平均手数料の1.5倍に設定します
パーティションの更新:例次の例では、sales
テーブルの単一パーティションの値を更新します。
UPDATE sales PARTITION (sales_q1_1999) s SET s.promo_id = 494 WHERE amount_sold > 1000;
オブジェクトテーブルの更新:例次のステートメントは、2つのオブジェクトテーブルpeople_demo1
とpeople_demo2
を作成します。 、テーブルコレクションで作成されたpeople_typ
オブジェクトの例:例。この例は、people_demo2
から行を選択して、people_demo1
の行を更新する方法を示しています。
この例では、 VALUE
オブジェクト参照関数のSET
句とサブクエリの両方。
関連する更新:例次の例の場合相関サブクエリを使用してネストされたテーブル行を更新します。「テーブルコレクション:例」を参照してください。
更新中のRETURNING句の使用:例次の例では、更新された行から値を返し、結果をPLに格納します。 / SQL変数bnd1
、bnd2
、bnd3
:
次の例は、戻り句の式で単一セットの集計関数を指定できることを示しています。
UPDATE employees SET salary = salary * 1.1 WHERE department_id = 100 RETURNING SUM(salary) INTO :bnd1;