用途
表またはビューの実表から行を削除します。
前提条件
表から行を削除するには、表がユーザーのスキーマ内にあるか、表に対してDELETEの権限を持っている必要があります。
ビューの実表から行を削除するには、ビューが属するスキーマの所有者が、実表に対してDELETEの権限を持っている必要があります。また、ビューがユーザー所有のスキーマ以外のスキーマにある場合は、ビューに対するDELETEの権限を付与されている必要があります。
DELETE ANY TABLEのシステム権限では、どの表またはビューの実表からでも行を削除できます。
構文
DML RETURNING句は次のとおりです。
キーワードおよびパラメータ
キーワードおよびパラメータ | 説明 |
---|---|
AT |
どのデータベースに対してDELETE文を発行するかを指定します。次のいずれかを使用してデータベースを指定します。 db_name: DECLARE DATABASE文を使用して事前に宣言したデータベース識別子。 host_variable: 事前に宣言したdb_name の値を持つホスト変数。この句を省略した場合、DELETE文はデフォルトのデータベースに対して発行されます。 |
FOR :host_integer |
WHERE句に配列ホスト変数が含まれる場合に、文を実行する回数を制限します。この句を省略した場合、Oracleは最小の配列の各コンポーネントにつき1回ずつ文が実行されます。 |
subquery |
対応する列に割り当てられた新しい値を戻す副問合せ。副問合せの構文は、『Oracle Database SQL言語リファレンス』のSELECTに関する項を参照してください。 |
schema |
表またはビューを含むスキーマ。schemaを省略した場合、Oracleでは表またはビューが自分のスキーマ内にあるとみなされます。 |
table |
行を削除する表の名前。 |
view |
ビューの名前。Oracleではビューの実表から行が削除されます。 |
FOR :host_integer |
WHERE句に配列ホスト変数が含まれる場合に、文を実行する回数を制限します。この句を省略した場合、Oracleは最小の配列の各コンポーネントにつき1回ずつ文が実行されます。 |
subquery |
対応する列に割り当てられた新しい値を戻す副問合せ。副問合せの構文は、『Oracle Database SQL言語リファレンス』のSELECTに関する項を参照してください。 |
schema |
表またはビューを含むスキーマ。schemaを省略した場合、Oracleでは表またはビューが自分のスキーマ内にあるとみなされます。 |
table |
行を削除する表の名前。 |
view |
ビューの名前。Oracleではビューの実表から行が削除されます。 |
使用上の注意
WHERE句のホスト変数は、すべてスカラーか、すべて配列である必要があります。変数がスカラーの場合、OracleはDELETE文を1回のみ実行します。変数が配列の場合、Oracleは配列のコンポーネント・セットごとに1回ずつこの文を実行します。1回の実行で0行、1行または複数行を削除できます。
WHERE句の配列ホスト変数は、サイズが異なっていてもかまいません。この場合、Oracleが文を実行する回数は、次のうちの小さい方の値によって決定します。
最小の配列のサイズ
オプションのFOR句の:host_integerの値
この条件を満たす行が存在しない場合、行は削除されず、SQLCODEはNOT_FOUND条件を戻します。
削除された行の累積数はSQLCAを介して戻されます。WHERE句に配列ホスト変数が指定されていると、DELETE文によって処理された配列のすべてのコンポーネントにおよぶ削除行数の合計がこの値に設定されます。
条件を満たす行がない場合、OracleはSQLCAのSQLCODEを介してエラーを戻します。WHERE句を省略した場合、OracleはSQLCAのSQLWARNの第5コンポーネントに警告フラグを設定します。この文とSQLCAの詳細は、ランタイム・エラーの処理を参照してください。
DELETE文でコメントを使用して、指示(つまりヒント)をオプティマイザに渡すことができます。オプティマイザは、これらのヒントを使用して文の実行計画を選択します。ヒントの詳細は、Oracle Databaseパフォーマンス・チューニング・ガイドを参照してください。
例
この例では、Pro*C/C++の埋込みSQLプログラムにおけるDELETE文の使用方法を示します。
EXEC SQL DELETE FROM emp WHERE deptno = :deptno AND job = :job; EXEC SQL DECLARE emp_cursor CURSOR FOR SELECT empno, comm FROM emp; EXEC SQL OPEN emp_cursor; EXEC SQL FETCH c1 INTO :emp_number, :commission; EXEC SQL DELETE FROM emp WHERE CURRENT OF emp_cursor;
関連項目