Generische Where-Klauseln

Aus SAP-Wiki
(Weitergeleitet von Dynamische Where-Klauseln)
Wechseln zu: Navigation, Suche

Hier ist die Where-Bedingung einer Tabelle erst zur Laufzeit bekannt. Die Felder werden mit einem Parameter P_WHERE im Selektionsbildschirm abgefragt, in eine Tabelle GT_WHERE gefüllt und mit (gt_where) dem Select-Statement übergeben. Die Tabelle GT_WHERE wird mit dem Befehl DATA: GT_WHERE TYPE TABLE OF STRING angelegt, um Felder beliebiger Länge aufnehmen zu können.

Um einen Laufzeitfehler zu vermeiden, wenn es in der Tabelle eine Where-Klausel nicht gibt, wird mit einem Try-Endtry-Befehl eine Fehlerbehandlung durchgeführt.

PARAMETERS: p_where(70) type c.

DATA: oerror     TYPE REF TO cx_root,
      txterror   TYPE string,
      gt_where   type table of string,
      gt_sflight type table of sflight.

append p_where to gt_where.

TRY.
    SELECT carrid
      INTO CORRESPONDING FIELDS OF TABLE gt_sflight
      from sflight
      where (gt_where).

  CATCH cx_sy_dynamic_osql_semantics INTO oerror.
    txterror = oerror->get_text( ).
    MESSAGE i531(0u) WITH txterror.
ENDTRY.

Ausblick

Ab NetWeaver 7.02 sind auch für interne Tabellen (LOOP) dynamische WHERE-Klauseln möglich.

Literatur