DELETE

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

Dieses Dokument behandelt folgende Themen:

Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.

Verwandte Statements: 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

Gehört zur Funktionsgruppe: Datenbankzugriffe und Datenbankänderungen


Funktion

Das Statement DELETE dient dazu, einen Datensatz von der Datenbank zu löschen.

Hold-Status

Das Vorhandensein eines DELETE-Statements bewirkt, dass alle Datensätze, die mit dem betreffenden READ- oder FIND-Statement gelesen werden, in den Hold-Status gestellt werden.

Die Hold-Logik ist im Kapitel Datenbankzugriffe im Leitfaden zur Programmierung beschrieben.

Einschränkung

Das DELETE-Statement darf nicht mit einem FIND-, READ- oder GET-Statement in derselben Quellcode-Zeile stehen.

Syntax-Beschreibung

Syntax-Element-Beschreibung

Syntax-Element Beschreibung
(r)
Statement-Referenz:

Die Notation (r) dient dazu, das Statement zu referenzieren, das verwendet wurde, um den zu löschenden Datensatz auszuwählen/zu lesen.

Wenn keine Statement-Referenz angegeben wird, referenziert das DELETE-Statement die jeweils innerste aktive Verarbeitungsschleife, mit der der Datensatz, der gelöscht werden soll, ausgewählt/gelesen wurde.

Datenbank-spezifische Anmerkungen

DL/I-Datenbanken

Mit dem DELETE-Statement kann ein Segment einer DL/I-Datenbank gelöscht werden, wobei gleichzeitig alle Descendants dieses Segments gelöscht werden.

Aufgrund von GSAM-Beschränkungen ist das UPDATE-Statement nicht auf GSAM-Datenbanken anwendbar.

VSAM-Datenbanken Das DELETE-Statement ist nicht auf VSAM-ESDS (Entry-Sequenced Data Sets) anwendbar.
SQL-Datenbanken

Mit dem DELETE-Statement können Sie eine Reihe aus einer Datenbank-Tabelle löschen. Das DELETE-Statement entspricht dem SQL-Statement DELETE WHERE CURRENT OF CURSOR-NAME, d.h. nur die zuletzt gelesene Reihe kann gelöscht werden.

Bei den meisten SQL-Datenbanken kann eine mit FIND SORTED BY oder READ LOGICAL gelesene Reihe nicht gelöscht werden.

Beispiele

Beispiel 1 — DELETE-Statement

In diesem Beispiel werden alle Datensätze mit Namen ALDEN gelöscht.

** 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                                                                    

Beispiel 2 — DELETE-Statement

Falls in der VEHICLES-Datei für die Person mit Namen ALDEN keine Datensätze gefunden werden, wird von der EMPLOYEES-Datei der Datensatz von ALDEN gelöscht.

** 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