2017-08-15 4 views
3

Hallo gibt es eine Möglichkeit, dies in einer Aussage zu setzen?Wie verkürzt man die DELETE-Anweisung für DB-Tabellen?

DELETE e_worklist where wbs_element = '00000000000000000054TTO'. 
DELETE e_worklist where wbs_element = '00000000000000000056TTO'. 
DELETE e_worklist where wbs_element = '00000000000000000055TTO'. 
DELETE e_worklist where wbs_element = '00000000000000000261TTO'. 
DELETE e_worklist where wbs_element = '00000000000000000263TTO'. 
DELETE e_worklist where wbs_element = '00000000000000000262TTO'. 
+1

Hängt davon ab, wo die Werte kommen aus ... – vwegert

Antwort

2

Die oben vorgeschlagenen Antworten mit IN sind nur für DB-Tabellen gilt:

VON e_worklist DELETE wo wbs_element IN ('00000000000000000054TTO', '00000000000000000056TTO', '00000000000000000055TTO').

In Ihrem Beispiel setzen Sie interne Tabellenanweisungen, und für sie ist die vorgeschlagene Syntax IN für Literale ungültig. Es funktioniert only with selection tables/ranges, die auch populated properly sein müssen. So können Sie nicht nur Literale wickeln in IN Klausel, müssen Sie smth wie dies zu tun:

ws_wbs-sign = 'I'. 
ws_wbs-option = 'EQ'. 
ws_wbs-low = '00000000000000000054TTO'. 
APPEND ws_wbs TO rt_wbs. 

DELETE e_worklist WHERE wbs_element IN rt_wbs. 

was mühsam ist, in der Tat, und werden Sie nicht Prägnanz bringen.

jedoch als Muster eintönig sind, können Sie Ihre Fantasie bringen und regex verwenden, zum Beispiel:

DELETE e_worklist WHERE wbs_element CP '00000000000000000*TTO'. 
1

Gib deinen weiteren Hinweis. Ohne Bereichstabellen können Sie mit FILTER und EXCEPT auch eine bessere Aussage erzielen. Dokumentation ist here.

Sie müssen e_worklist als sorted table kopieren oder machen.

data: 
    ls_worklist like line of e_worklist, 
****Ajust your key if necessary 
    lts_worklist like sorted table of ls_worklist with unique key table_line, 
    lth_wbs_element like hashed table of ls_worklist-wbs_element with unique key table_line. 

lts_worklist = e_worklist. 

****Add your other values if necessary 
lth_wbs_element = value #((|00000000000000000054TTO|) (|00000000000000000263TTO|)). 

e_worklist = filter #(lts_worklist except in lth_wbs_element where wbs_element = table_line). 
+0

Eigentlich Filter-Operator von 7,4 beginnt. Es ist nur eine andere Art der Codierung des Formats – Allen

1

Da es sich um eine interne Tabelle ist, im Gegensatz zu Datenbankbefehle, gibt es keine wirkliche Auswirkung auf die Leistung aus, die Anzahl der DELETE-Befehle nach unten zu bekommen. Sie können es mit etwas prägnanter machen:

DELETE e_worklist where wbs_element =: '00000000000000000054TTO', 
             '00000000000000000056TTO', 
             '00000000000000000055TTO', 
             '00000000000000000261TTO', 
             '00000000000000000263TTO', 
             '00000000000000000262TTO'. 
Verwandte Themen