DELETE文

DELETE文は、条件を満たす行セットを表から削除するために使用されます。

構文

delete_statement ::= 
   [variable_declaration]
   DELETE FROM table_name [[AS] table_alias] 
   WHERE expression 
   [returning_clause]

returning_clause ::= RETURNING select_list

セマンティクス

delete文は、条件を満たす行セットを表から削除するために使用されます。条件は、SELECT式と同じように動作するWHERE句に指定されます。DELETE文の結果は、RETURNING句が存在するかどうかによって異なります。RETURNING句がない場合、DELETEは削除された行数を返します。それ以外の場合、削除された行ごとに、RETURNING句の後の式がSELECT句と同じ方法で計算され、結果がアプリケーションに返されます。最後に、DELETE文は、文の残りの部分で使用される外部変数の宣言で始まる場合があります。問合せと同様に、このような宣言は必須です。

DELETE文の実行中にエラーが発生した場合は、一部の行が削除され、一部の行は削除されない可能性があります。システムでは、どの行が削除され、どの行が削除されていないかは追跡されません。これは、Oracle NoSQL Databaseでは低レイテンシ操作に重点が置かれているためです。シャード間で長時間実行される操作は、2フェーズ・コミットおよびロック・メカニズムを使用して調整されません。このような場合は、アプリケーションでDELETE文を再実行することをお薦めします。

例7-14 SQLによる行の削除

次の文は、年齢が16未満のすべてのユーザーを削除し、削除された各ユーザーの姓と名を返します。

DELETE FROM users
WHERE age < 16
RETURNING firstName, lastName;

例7-15 過去1年の履行済オーダーに関連する買物客のデータをstoreAcctComposite表から削除する

DELETE文を使用して、JSONコレクション表からデータを削除できます。DELETE操作は、固定スキーマ表と同様に機能します。ショッピング・アプリケーション用に作成されたJSONコレクション表について考えてみます。

DELETE FROM storeAcctComposite s where s.orders.EstDelivery <any "2023-01-01" AND s.orders.status =any "Delivered" RETURNING contactPhone, id, firstName; 

説明: storeAcctCompositeテーブルでは、買物客に永続的なアカウントがありません。contactPhoneおよびidは、オーダーの追跡に使用されます。メンテナンス・アクティビティとして、前述のDELETE文では、すべてのオーダーがすでに配送されて配送日が2023年より前の買物客のデータが削除されます。

出力:
{
  "contactPhone" : "1517113582",
  "id" : 10, 
  "firstName" : "Dierdre"
}