DELETE

DELETE [RECORD] [IN] [STATEMENT] [(r)]

このドキュメントでは、次のトピックについて説明します。

構文図で使用されている記号については、「構文記号」を参照してください。

関連ステートメント:ACCEPT/REJECT | AT BREAK | AT START OF DATA | AT END OF DATA | BACKOUT TRANSACTION | BEFORE BREAK PROCESSING | END TRANSACTION | FIND | GET | GET SAME | GET TRANSACTION DATA | HISTOGRAM | LIMIT | PASSW | PERFORM BREAK PROCESSING | READ | RETRY | STORE | UPDATE

関連機能グループ:データベースへのアクセスと更新


関数

DELETE ステートメントは、データベースからレコードを削除するために使用します。

ホールド状態

DELETE ステートメントを使用すると、対応する FINDREAD ステートメントで選択した各レコードは排他的ホールド状態になります。

レコードのホールドロジックの詳細については、『プログラミングガイド』の「データベース更新 - トランザクション処理」セクションを参照してください。

制限事項

DELETE ステートメントは、FINDREAD、または GET ステートメントと同じ行に指定することはできません。

構文説明

構文要素 説明
(r)
ステートメント参照:

表記 (r) を指定して、削除するレコードの選択と読み取りに使用されたステートメントを参照します。

ステートメント参照の指定がない場合、DELETE ステートメントは、データベースレコードが選択されて読み込まれた最も内側でアクティブになっている処理ループを参照します。

データベース固有の考慮事項

SQL データベース

DELETE ステートメントは、データベーステーブルから 1 つの行を削除するために使用します。これは、SQL ステートメントの DELETE WHERE CURRENT OF CURSOR-NAME に対応するものです。つまり、最後に読み取られた行のみを削除できます。

ほとんどの SQL データベースでは、FIND SORTED BY または READ LOGICAL ステートメントで読み取られた行は削除できません。

XML データベース DELETE ステートメントは、データベースから XML オブジェクトを削除するために使用します。XML データベースでは、最後に読み取られたレコードのみを削除できます。

例 1

この例では、ALDEN を含むレコードがすべて削除されます。

** Example 'DELEX1': DELETE                                             
**                                                                      
** 
CAUTION: Executing this example will modify the database records!  
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 NAME                                                                
END-DEFINE                                                              
*                                                                       
FIND EMPLOY-VIEW WITH NAME = 'ALDEN'                                    
  /*                                                                    
  DELETE                                                                
  END TRANSACTION                                                   
  /*                                                                    
  AT END OF DATA                                                        
    WRITE NOTITLE *NUMBER 'RECORDS DELETED'                             
  END-ENDDATA                                                           
END-FIND                                                                
END

例 2

VEHICLES ファイルで ALDEN という名前の人物が見つからない場合は、ALDEN の EMPLOYEE レコードが削除されます。

** Example 'DELEX2': DELETE                                             
**                                                                      
** 
CAUTION: Executing this example will modify the database records! 
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 PERSONNEL-ID                                                        
  2 NAME                                                                
1 VEHIC-VIEW VIEW OF VEHICLES                                           
  2 PERSONNEL-ID                                                        
END-DEFINE                                                              
*                                                                       
EMPL. FIND EMPLOY-VIEW WITH NAME = 'ALDEN'                              
  /*                                                                    
 VEHC. FIND VEHIC-VIEW WITH PERSONNEL-ID = PERSONNEL-ID (EMPL.)        
    IF NO RECORDS FOUND                                                 
      /*                                                                
      DELETE (EMPL.)                                                    
      /*                                                                
      END TRANSACTION
    END-NOREC        
  END-FIND        
  /*                 
END-FIND             
END