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

前
次

DELETE (実行可能埋込みSQL)

DELETEの用途

表またはビューの実表から行を削除します。

DELETEの前提条件

表から行を削除するには、表が自分のスキーマにあるか、または表に対するDELETE権限が必要です。

ビューの実表から行を削除するには、ビューが属するスキーマの所有者に、実表に対するDELETE権限が必要です。また、ビューが自分以外のスキーマにある場合は、そのビューに対するDELETE権限が必要です。

DELETE ANY TABLEシステム権限があれば、どの表またはビューの実表からでも行を削除できます。

OracleをDBMS MACモードで使用している場合は、DBMSラベルが表またはビューの作成ラベルより上位にあるか、次の条件の1つを満たしている必要があります。

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

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

さらに、各表を削除するには、DBMSラベルがその行のラベルと一致するか、次の条件の1つを満たす必要があります。

  • 行のラベルがDBMSラベルより上位にある場合は、READUPおよびWRITEUPシステム権限が必要です。

  • 行ラベルがDBMSラベルより下位にある場合は、WRITEDOWNシステム権限が必要です。

  • 行ラベルがDBMSラベルと同等でない場合は、READUPWRITEUPおよびWRITEDOWNシステム権限が必要です。

DELETEの構文

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

AT

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

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

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

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

FOR :host_integer

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

schema

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

table view

行を削除する表の名前。viewを指定すると、Oracleはビューの実表から行を削除します。

dblink

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

dblinkを省略した場合、Oracleは表またはビューがローカル・データベースにあるとみなします。

alias

表に割り当てられた別名。別名は一般に、相関問合せのあるDELETE文で使用されます。

WHERE

削除する行を指定します。

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

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

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

DELETEの使用上の注意

WHERE句のホスト変数は、すべてがスカラーか、あるいはすべてが配列であることが必要です。変数がスカラーの場合、OracleではDELETE文が1回しか実行されません。変数が配列の場合、Oracleは配列のコンポーネント・セットごとに1回ずつこの文を実行します。1回の実行で0行、1行または複数行を削除できます。

WHERE句の配列ホスト変数は、サイズが異なっていてもかまいません。この場合、Oracleが文を実行する回数は、次のうちの小さい方の値によって決定します。

  • 最小の配列のサイズ

  • オプションのFOR句の:host_integerの値

この条件を満たす行がない場合、行は削除されず、SQLCODENOT_FOUND条件を戻します。

削除された行の累積数はSQLCAを介して戻されます。WHERE句に配列ホスト変数が指定されていると、DELETE文によって処理された配列のすべてのコンポーネントについて削除された行の合計数がこの値に反映されます。

条件を満たす行がない場合、OracleからはSQLCAのSQLCODEを介してエラーが戻されます。WHERE句を省略した場合、OracleによりSQLCAのSQLWARNの第5コンポーネントに警告フラグが設定されます。このコマンドおよびSQLCAの詳細は、エラーの処理および診断を参照してください。

DELETE文ではコメントを使用して、指示、すなわちヒントをOracleオプティマイザに渡すことができます。オプティマイザでは、このヒントを使用して文の実行計画が選択されます。

DELETEの例

この例では、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;

DELETEの関連トピック

DECLARE DATABASE(Oracle埋込みSQLディレクティブ)およびDECLARE STATEMENT(埋込みSQLディレクティブ)