Ansicht
Dokumentation

ABAPINSERT_FROM_SELECT - INSERT FROM SELECT

ABAPINSERT_FROM_SELECT - INSERT FROM SELECT

ROGBILLS - Synchronize billing plans   General Data in Customer Master  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

INSERT, MODIFY dbtab, subquery_clauses

Kurzreferenz





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.

  • 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

  • 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.
  • 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 )