表から行を削除するには、表が自分のスキーマにあるか、または表に対するDELETE
権限が必要です。
ビューの実表から行を削除するには、ビューが属するスキーマの所有者に、実表に対するDELETE
権限が必要です。また、ビューが自分以外のスキーマにある場合は、そのビューに対するDELETE
権限が必要です。
DELETE
ANY
TABLE
システム権限があれば、どの表またはビューの実表からでも行を削除できます。
OracleをDBMS MAC
モードで使用している場合は、DBMSラベルが表またはビューの作成ラベルより上位にあるか、次の条件の1つを満たしている必要があります。
表またはビューの作成ラベルがDBMSラベルより上位にある場合は、READUP
およびWRITEUP
システム権限が必要です。
表またはビューの作成ラベルがDBMSラベルと同等でない場合は、READUP
、WRITEUP
およびWRITEDOWN
システム権限が必要です。
さらに、各表を削除するには、DBMSラベルがその行のラベルと一致するか、次の条件の1つを満たす必要があります。
行のラベルがDBMSラベルより上位にある場合は、READUP
およびWRITEUP
システム権限が必要です。
行ラベルがDBMSラベルより下位にある場合は、WRITEDOWN
システム権限が必要です。
行ラベルがDBMSラベルと同等でない場合は、READUP
、WRITEUP
およびWRITEDOWN
システム権限が必要です。
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は表またはビューからすべての行を削除します。
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オプティマイザに渡すことができます。オプティマイザでは、このヒントを使用して文の実行計画が選択されます。
この例では、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;