Ansicht
Dokumentation
ABAPINSERT_FROM_SELECT - INSERT FROM SELECT
ROGBILLS - Synchronize billing plans General Data in Customer MasterDiese Dokumentation steht unter dem Copyright der SAP AG.
INSERT, MODIFY dbtab, subquery_clauses
Wirkung
Mögliche Klauseln und Zusätze einer Subquery hinter dem Zusatz FROM der Anweisungen INSERT und MODIFY. Diese Klauseln definieren eine Ergebnismenge, die als Datenquelle der INSERT- oder MODIFY-Anweisung verwendet wird.
Die Ergebnismenge der Subquery muss abgesehen von der Mandantenspalte mindestens so viele Spalten wie der Primärschlüssel der Datenbanktabelle bzw. der DDIC-Tabellen-View haben, die mit der INSERT-Anweisung gefüllt bzw. mit der MODIFY-Anweisung modifiziert wird. Sie darf aber nicht mehr Spalten als die Zieldatenbanktabelle des DDIC bzw. View haben.
Es gelten folgende speziellen Regeln:
- FROM-Klausel
- Wenn die mit der INSERT- oder MODIFY-Anweisung bearbeitete DDIC-Datenbanktabelle bzw. DDIC-View mandantenabhängig ist, muss mindestens eine Datenquelle der Subquery mandantenabhängig sein.
- In der FROM-Klausel darf die implizite Mandantenbehandlung nicht mit dem obsoleten Zusatz CLIENT SPECIFIED abgeschaltet werden.
- Wenn die Subquery mit der standardmäßigen Mandantenbehandlung arbeitet oder diese mit USING CLIENT umgeschaltet wird, darf die implizite Mandantenbehandlung der INSERT- oder MODIFY-Anweisung nicht mit CLIENT SPECIFIED umgeschaltet werden.
- Wenn die implizite Mandantenbehandlung in der Subquery mit USING $[ALL$] CLIENTS $[IN$] umgeschaltet wird, muss die implizit Mandantenbehandlung der INSERT- oder MODIFY-Anweisung mit CLIENT SPECIFIED umgeschaltet werden.
- SELECT-Klausel
- Bei einer als kommaseparierte Liste angegebenen SELECT-Liste der Subquery muss diese für mindestens jede Spalte des Primärschlüssels der zu füllenden DDIC-Datenbanktabelle bzw. DDIC-View eine Spalte der Ergebnismenge definieren.
- Wenn die Subquery mit der standardmäßigen Mandantenbehandlung arbeitet oder diese mit USING CLIENT umgeschaltet wird, darf keine Mandantenspalte als erste Spalte der SELECT-Liste aufgeführt werden. An anderen Positionen wird eine Mandantenspalte nicht als solche interpretiert.
- Wenn die implizite Mandantenbehandlung in der Subquery mit USING $[ALL$] CLIENTS $[IN$] umgeschaltet wird, muss die erste Spalte der SELECT-Liste eine Mandantenspalte sein.
- In einer mit * angegebenen SELECT-Liste der Subquery muss die sich ergebende Ergebnismenge für mindestens jede Spalte des Primärschlüssels der zu füllenden DDIC-Datenbanktabelle bzw. DDIC-View eine Spalte enthalten.
- Wenn die Subquery mit der standardmäßigen Mandantenbehandlung arbeitet oder diese mit USING CLIENT umgeschaltet wird, wird die Mandantenspalte der Ergebnismenge nicht berücksichtigt.
- Wenn die implizite Mandantenbehandlung in der Subquery mit USING $[ALL$] CLIENTS $[IN$] umgeschaltet wird, wird die Mandantenspalte der Ergebnismenge berücksichtigt.
- ORDER BY-Klausel
- Der Zusatz UP TO n ROWS darf nur hinter ORDER BY verwendet werden.
- Der Zusatz OFFSET darf nur hinter UP TO n ROWS verwendet werden.
- Eine ORDER BY-Klausel in einer Subquery wird nicht von allen Datenbanken unterstützt. Deshalb kommt es zu einer durch das Pragma ##db_feature_mode[limit_in_subselect_or_cte] ausblendbaren Syntaxwarnung der erweiterten Programmprüfung. Wenn dies zur Laufzeit auf einer Datenbank erkannt wird, die dies nicht unterstützt, kommt es zu einer behandelbaren Ausnahme der Klasse CX_SY_SQL_UNSUPPORTED_FEATURE.
In einer weiteren Subquery innerhalb der Subquery dar nicht auf die Tabelle oder View zugegriffen werden, die mit der INSERT- oder MODIFY-Anweisung bearbeitet wird.
Hinweise
- Mit der Methode USE_FEATURES der Klasse CL_ABAP_DBFEATURES kann in einem ABAP-Programm festgestellt werden, ob das aktuelle Datenbanksystem oder ein Datenbanksystem, auf das über eine Sekundärverbindung zugegriffen wird, eine ORDER BY-Klausel in Subqueries unterstützt. Hierzu muss die Konstante LIMIT_IN_SUBSELECT_OR_CTE dieser Klasse in einer internen Tabelle an die Methode übergeben werden.
- Bei Verwendung einer Subquery umgeht die -Anweisung die Tabellenpufferung.
- Die implizite Mandantenbehandlung der Subquery richtet sich nicht nach der Mandantenbehandlung der INSERT- oder MODIFY-Anweisung. Ein Zusatz USING oder CLIENT SPECIFIED der INSERT- oder MODIFY-Anweisung wirkt nicht auf die Subquery. In der Subquery wird entweder die aktuelle oder eine in der Subquery mit USING angegebene Mandantenkennung verwendet. Beim Schreiben des Ergebnisses der Subquery wirkt standardmäßig aber die implizite Mandantenbehandlung der INSERT- oder MODIFY-Anweisung, die durch die Zusätze USING CLIENT oder CLIENT SPECIFIED gesteuert werden kann.
- Die Verwendung einer Subquery in der Anweisung MODIFY sowie die Verwendung von USING CLIENT oder ein Zugriff in der Subquery auf die DDIC-Datenbanktabelle bzw. DDIC-View, die mit einer INSERT-Anweisung gefüllt wird, führt zum strikten Modus ab Release . Die Verwendung von USING $[ALL$] CLIENTS $[IN$] führt zum strikten Modus ab Release .
Beispiel
Einfügen von Spalten einer über einen inneren Join gebildeten Ergebnismenge in eine Datenbanktabelle.
BAL_S_LOG - Application Log: Log header data rdisp/max_wprun_time - Maximum work process run time
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 9487 Date: 20240419 Time: 222644 sap01-206 ( 115 ms )