用途
非パーティション表またはパーティション表
ビューの非パーティション実表またはパーティション実表
書込み可能なマテリアライズド・ビューの非パーティション・コンテナ表またはパーティション・コンテナ表
更新可能なマテリアライズド・ビューの非パーティション・マスター表またはパーティション・マスター表
前提条件
表から行を削除する場合、その表が自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、その表に対するDELETE
オブジェクト権限が必要です。
更新可能なマテリアライズド・ビューから行を削除する場合、そのマテリアライズド・ビューが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、そのマテリアライズド・ビューに対するDELETE
オブジェクト権限が必要です。
ビューの実表から行を削除する場合、そのビューが含まれるスキーマの所有者には、その実表に対するDELETE
オブジェクト権限が必要です。また、他のスキーマ内にビューが存在している場合は、そのビューに対するDELETE
オブジェクト権限が必要です。
DELETE
ANY
TABLE
システム権限を持っている場合、任意の表、表パーティションまたは任意のビューの実表から行を削除できます。
リモート・データベースのオブジェクトの行を削除するには、オブジェクトのREAD
またはSELECT
オブジェクト権限も必要です。
SQL92_SECURITY
初期化パラメータがTRUE
に設定され、DELETE
操作がwhere_clause
の列などの表の列を参照する場合、行を削除するオブジェクトのSELECT
オブジェクト権限も必要です。
表のファンクション索引が無効な状態にあるとき、表から行を削除できません。まず、ファンクション索引を検証する必要があります。
構文
delete::=
(DML_table_expression_clause::=、where_clause::=、returning_clause ::=、error_logging_clause ::=を参照)
DML_table_expression_clause::=
(partition_extension_clause::=、subquery::=、subquery_restriction_clause::=、table_collection_expression::=を参照)
partition_extension_clause::=
subquery_restriction_clause::=
table_collection_expression::=
where_clause::=
セマンティクス
hint
文の実行計画を選択する場合に、オプティマイザに指示を与えるためのコメントを指定します。
from_clause
FROM
句を使用すると、行を削除するデータベース・オブジェクトを指定できます。
ONLY
構文は、ビューのみに関連します。FROM
句のビューがビューの階層に属し、そのいずれのサブビューからも行を削除しない場合は、ONLY
句を使用します。
DML_table_expression_clause
この句を使用すると、データを削除するオブジェクトを指定できます。
schema
表またはビューが含まれているスキーマを指定します。schema
を指定しない場合、表またはビューは自分のスキーマにあるとみなされます。
table | view | materialized view | subquery
行を削除する表、ビュー、マテリアライズド・ビュー、列または副問合せの結果の列の名前を指定します。
更新可能なビューから行を削除すると、実表から行が削除されます。
読取り専用マテリアライズド・ビューからは行を削除できません。書込み可能なマテリアライズド・ビューから行を削除する場合、基礎となるコンテナ表から行が削除されます。ただし、その削除は次のリフレッシュ操作で上書きされます。マテリアライズド・ビュー・グループ内の更新可能なマテリアライズド・ビューから行を削除する場合、マスター表の対応する行も削除されます。
table
、view
の実表またはmaterialized_view
のマスター表に、1列以上のドメイン索引列が含まれる場合は、この文によって適切な索引タイプの削除ルーチンが実行されます。
関連項目: これらのルーチンの詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。 |
表に対してDELETE
文を実行すると、その表に定義されているDELETE
トリガーが起動されます。
行の削除によって解放される表や索引のすべての領域は、表および索引によって引き続き保持されます。
オブジェクト内にある削除対象のパーティションまたはサブパーティションの名前またはパーティション・キー値を指定します。
パーティション・オブジェクトから値を削除する場合、そのパーティション名を指定する必要はありません。ただし、パーティション名を指定した方が、複雑なwhere_clause
より効率が上がることがあります。
dblink
オブジェクトが格納されているリモート・データベースへのデータベース・リンクの完全名または部分名を指定します。Oracle Databaseの分散機能を使用している場合にのみ、リモート・オブジェクトから行を削除できます。
dblink
を省略した場合、オブジェクトがローカル・データベース上にあるとみなされます。
subquery_restriction_clause
を使用すると、次のいずれかの方法で副問合せを制限できます。
WITH READ ONLY WITH READ ONLY
を指定すると、表またはビューを更新禁止にできます。
WITH CHECK OPTION WITH CHECK OPTION
を指定すると、副問合せに含まれない行を生成する表またはビューの変更を禁止できます。この句をDML文の副問合せ内で使用する場合、FROM
句内の副問合せには指定できますが、WHERE
句内の副問合せには指定できません。
CONSTRAINT constraint CHECK OPTION
制約の名前を指定します。この識別子を省略した場合は、Oracleによって自動的にSYS_C
n
という形式の制約名が割り当てられます(nはデータベース内で制約名を一意にするための整数)。
table_collection_expression
table_collection_expression
を使用すると、問合せおよびDML操作で、collection_expression
値を表として扱うことができます。collection_expression
には、副問合せ、列、ファンクションまたはコレクション・コンストラクタのいずれかを指定できます。その形式にかかわらず、集合値(ネストした表型またはVARRAY型の値)を戻す必要があります。このようなコレクションの要素抽出プロセスをコレクション・ネスト解除といいます。
TABLE
コレクション式を親表と結合する場合は、オプションのプラス(+)には大きな意味があります。+を指定すると、その2つの外部結合が作成され、コレクション式がNULLの場合でも、外部表の行が問合せで戻されるようになります。
注意: 以前のリリースのOracleでは、collection_expression が副問合せの場合、table_collection_expression をTHE subquery と表現していました。現在、このような表現方法は非推奨になっています。 |
相関副問合せでtable_collection_expression
を使用すると、他の表に存在する値で行を削除できます。
collection_expression 削除するオブジェクトからネストした表の列を選択する副問合せを指定します。
dml_table_expression_clause句の制限事項: この句には、次の制限事項があります。
view
またはmaterialized_view
のtable
(実表またはマスター表)にIN_PROGRESS
またはFAILED
のマークが付いたドメイン索引がある場合、この文は実行できません。
関係する索引パーティションがUNUSABLE
とマークされている場合は、パーティションに挿入できません。
DML_table_expression_clause
の副問合せでは、
ORDER BY
句を指定できません。
ビューを定義する問合せに次のいずれかの構造体が含まれている場合は、INSTEAD
OF
トリガーを使用する場合を除いて、ビューから行を削除できません。
DISTINCT
演算子GROUP
BY
、ORDER
BY
、MODEL
、CONNECT
BY
またはSTART
WITH
句SELECT
構文のリストにあるコレクション式SELECT
構文のリストにある副問合せWITH READ ONLY
が指定された副問合せUNUSABLE
のマークが付いている索引、索引パーティションまたは索引サブパーティションを指定する場合、SKIP_UNUSABLE_INDEXES
初期化パラメータがtrue
に設定されていないかぎり、DELETE
文は正常に実行されません。
where_clause
を使用すると、条件を満たす行のみを削除できます。この条件は、行を削除するオブジェクトを参照したり、副問合せを含むことができます。Oracle Databaseの分散機能を使用している場合にのみ、リモート・オブジェクトから行を削除できます。conditionの構文は、第6章「条件」
を参照してください。
この句がリモート・オブジェクトを参照するsubquery
を含む場合、参照がローカル・データベース上でオブジェクトにループバックしないかぎり、DELETE
はパラレルで実行されます。ただし、DML_table_expression_clause
のsubquery
がリモート・オブジェクトを参照する場合は、DELETE
操作はシリアルで実行されます。詳細は、「CREATE TABLE」の「parallel_clause
」
を参照してください。
dblink
を省略した場合、表またはビューがローカル・データベース上にあるとみなされます。
where_clause
を省略した場合、オブジェクトのすべての行が削除されます。
t_alias 文中で参照する表、ビュー、マテリアライズド・ビュー、副問合せまたはコレクション値の相関名を指定します。DML_table_expression_clause
がいずれかのオブジェクト型属性またはオブジェクト型メソッドを参照する場合、この別名が必要です。通常、別名は相関問合せを持つDELETE
文で使用されます。
この句を使用すると、削除された列から値を戻すことができるため、DELETE
文の後でSELECT
文を実行する必要がなくなります。
この句を使用すると、DML文に影響される行を取り出すことができます。この句は、表、マテリアライズド・ビュー、および単一の実表を持つビューに指定できます。
returning_clause
を指定したDML文を単一行に実行すると、影響された行、ROWID、および処理された行へのREF
を使用している列式が取り出され、ホスト変数またはPL/SQL変数に格納されます。
returning_clause
を指定したDML文を複数行に実行すると、式の値、ROWIDおよび処理された行に関連するREF
がバインド配列に格納されます。
expr expr
リストの各項目は、適切な構文で表す必要があります。
INTO INTO
句を指定すると、変更された行の値を、data_item
リストに指定する変数に格納できます。
data_item data_item
はそれぞれ、取り出したexpr
値を格納するためのホスト変数またはPL/SQL変数です。
RETURNING
リストの各式については、INTO
リストに、対応する型に互換性があるPL/SQL変数またはホスト変数を指定する必要があります。
制限事項: RETURNING
句には、次の制限事項があります。
expr
に次の制限事項があります。
UPDATE
文およびDELETE
文の場合、各expr
は、単純式または単一セットの集計ファンクション式である必要があります。1つのreturning_clause
内に単純式と単一セットの集計ファンクション式を混在させることはできません。INSERT
文の場合、各expr
は単純式である必要があります。INSERT
文のRETURNING
句では、集計ファンクションはサポートされていません。
単一セットの集計ファンクション式をDISTINCT
キーワードに含めることはできません。
expr
のリストに主キー列または他のNOT
NULL
列が含まれている場合は、表にBEFORE
UPDATE
トリガーが定義されていると、UPDATE文の実行に失敗します。
マルチテーブル・インサートではreturning_clause
を指定できません。
パラレルDMLまたはリモート・オブジェクトにはこの句を使用できません。
LONG
型を取り出すことはできません。
INSTEAD
OF
トリガーが定義されたビューに対して指定することはできません。
関連項目:
|
error_logging_clause
のDELETE
文での動作は、INSERT
文の場合と同じです。詳細は、「INSERT
」文の「error_logging_clause」を参照してください。
例
行の削除例: 次の文は、language_id
列の値がAR
の、サンプル表oe.product_descriptions
からすべての行を削除します。
DELETE FROM product_descriptions WHERE language_id = 'AR';
次の文は、サンプル表hr.employees
から歩合率が10%未満の購買係を削除します。
DELETE FROM employees WHERE job_id = 'SA_REP' AND commission_pct < .2;
次の文は前述の例と同じ結果を表しますが、副問合せを使用します。
DELETE FROM (SELECT * FROM employees) WHERE job_id = 'SA_REP' AND commission_pct < .2;
リモート・データベースの行の削除例: 次の文は、データベース・リンクremote
によってアクセス可能なデータベースの、ユーザーhr
が所有するlocations
表から指定した行を削除します。
DELETE FROM hr.locations@remote WHERE location_id > 3000;
ネストした表の行の削除例: ネストした表の行の削除例は、「表のコレクション例:」を参照してください。
パーティションの行の削除例: 次の例は、sh.sales
表のパーティションsales_q1_1998
から行を削除します。
DELETE FROM sales PARTITION (sales_q1_1998) WHERE amount_sold > 1000;
RETURNING句の使用例:
次の例は、削除された行からsalary
列を戻し、その結果をバインド配列:bnd1
に格納します。バインド配列は事前に宣言しておく必要があります。
DELETE FROM employees WHERE job_id = 'SA_REP' AND hire_date + TO_YMINTERVAL('01-00') < SYSDATE RETURNING salary INTO :bnd1;