Show TOC Anfang des Inhaltsbereichs

Selektionstabellen  Dokument im Navigationsbaum lokalisieren

Jede Anweisung

SELECT-optionS seltab FOR f.

deklariert im Programm eine Selektionstabelle, die mit der Spalte f einer Datenbanktabelle oder einem programmlokalen Feld f verknüpft ist. Eine Selektionstabelle ist ein internes Tabellenobjekt der Tabellenart Standard-Tabelle mit Standardschlüssel und mit Kopfzeile. In Selektionstabellen werden komplexe Selektionen auf standardisierte Weise abgespeichert. Sie können auf verschiedene Weise eingesetzt werden. Ihr Hauptzweck ist es, mit Hilfe des WHERE-Zusatzes in Open SQL-Anweisungen die Selektionskriterien direkt in Datenbankabgrenzungen umzusetzen.

Neben Selektionstabellen, die mit SELECT-optionS angelegt werden, kann die Anweisung RANGESverwendet werden um interne Tabellen mit der Struktur von Selektionstabellen anzulegen. Diese Tabellen können mit Einschränkungen wie echte Selektionstabellen verwendet werden.

Struktur von Selektionstabellen

Der Zeilentyp einer Selektionstabelle ist eine Struktur mit den vier Komponenten: sign, option, low und high. Jede gefüllte Zeile einer Selektionstabelle stellt eine Unterbedingung für das gesamte Selektionskriterium dar. Die Komponenten im Einzelnen:

·        sign

sign hat den Datentyp c und die Länge 1. Der Inhalt von sign bestimmt für jede Zeile, ob das Ergebnis der Zeilenbedingung in der Gesamtergebnismenge aller Zeilen ein- oder ausgeschlossen wird. Die möglichen Werte sind I und E.

   I bedeutet “inclusive” (Einschlusskriterium)

   E bedeutet “exclusive” (Ausschlusskriterium)

·        option

option hat den Datentyp c und die Länge 2. option enthält den Selektionsoperator. Es gibt folgende Operatoren:

   Ist high leer, können EQ, NE, GT, LE, LT, CP und NP verwendet werden. Die Operatoren sind die gleichen wie bei logischen Ausdrücken. Die Operatoren CP und NP haben aber nicht den vollen Funktionsumfang wie in normalen logischen Ausdrücken. Sie sind nur zulässig, wenn Maskenzeichen ( '*' oder '+' ) in den Eingabefeldern benutzt werden. Falls Maskenzeichen auf dem Selektionsbild eingegeben verwendet werden, wird automatisch der Operator CP verwendet. Als Fluchtsymbol ist # definiert.

   Ist highgefüllt, können BT (BeTween) und NB (Not Between) verwendet werden. Diese Operatoren entsprechen BETWEEN und NOT BETWEEN beim Prüfen von Intervallzugehörigkeit. Es können keine Maskenzeichen verwendet werden.

·        low

low hat den gleichen Datentyp wie die Spalte der Datenbanktabelle, mit der das Selektionskritierium verknüpft ist.

   Ist high leer, definiert der Inhalt von low einen Einzelfeldvergleich. In Verbindung mit dem Operator im Feld option, gibt er eine Bedingung für die Datenbankselektion an.

   Ist highgefüllt, geben die Inhalte von low und high eine Ober- und Untergenze für ein Intervall an. In Verbindung mit dem Operator im Feld option, gibt das Intervall eine Bedingung für die Datenbankselektion an (Intervallselektion).

·        high

high hat den gleichen Datentyp wie der Spaltentyp der Datenbanktabelle, mit der das Selektionskritierium verbunden ist. Der Inhalt von high gibt die Obergrenze für eine Intervallselektion an.

Enthält die Selektionstabelle mehr als eine Zeile, wird bei der Bildung des gesamten Selektionskriteriums nach folgenden Regeln vorgegangen:

...

       1.      Es wird die Vereinigungsmenge der “Inklusiv”-Mengen, d.h. aller Zeilen mit sign gleich I gebildet.

       2.      Davon wird die Vereinigungsmenge der “Exklusiv”-Mengen, d.h. aller Zeilen mit sign gleich E abgezogen.

       3.      Besteht die Selektionstabelle nur aus Zeilen, in denen das Feld sign gleich E ist, werden alle Daten ausgewählt, die außerhalb des in den Zeilen definierten Bestands liegen.

RANGES-Tabellen

Mit folgenden Varianten der TYPES- oder DATA-Anweisung können interne Tabellen des gleichen Typs wie Selektionstabellen angelegt werden:

TYPES|DATA rangetab TYPE RANGE OF type.

oder

TYPES|DATA rangetab LIKE RANGE OF obj.

Es werden interne Standard-Tabellen definiert, deren Zeilentyp eine Struktur mit folgendem Aufbau ist:

·        sign(1) TYPE c

·        option(2) TYPE c

·        low TYPE type bzw. LIKE obj

·        high TYPE type bzw. LIKE obj

Solcherart definierte Tabellen haben die gleiche Struktur wie Selektionstabellen, jedoch nicht deren Funktionalität. Sie sind nicht Bestandteile des Selektionsbildes. Es werden keine entsprechenden Eingabefelder generiert und diese Tabellen können nicht in einem durch die Anweisung

SUBMIT prog WITH rangetab IN table.

aufgerufenen Programm prog als Datenschnittstelle verwendet werden. Umgekehrt kann aber die Tabelle table im aufrufenden Programm sehr wohl mit obigen Anweisungen angelegt werden. Dies ist auch gleichzeitig die Hauptaufgabe dieser Tabellen, nämlich beim Aufruf ausführbarer Programme Daten an deren echte Selektionstabellen zu übergeben, ohne dass das Selektionsbild zur Anzeige gebracht werden muss.

Obige Tabellen sind zwar wie echte Selektionstabellen in der WHERE-Klausel von Open SQL-Anweisungen und mit dem Operator IN in logischen Ausdrücken verwendbar, sie sind aber nicht mit einer Datenbanktabelle verknüpft. sie

·        werden nicht wie Selektionskriterien an logische Datenbanken übergeben.

·        können nicht mit der Kurzform von Selektionstabellen in logischen Ausdrücken verwendet werden.

·        können nicht wie Selektionstabellen in GET-Ereignissen verwendet werden.

Beispiel

REPORT demo_sel_screen_tables_ranges.

DATA: s_carrid TYPE RANGE OF spfli-carrid,
      s_carrid_wa LIKE LINE OF s_carrid.

s_carrid_wa-sign   = 'I'.
s_carrid_wa-option = 'EQ'.
s_carrid_wa-low    = 'AA'.

APPEND s_carrid_wa TO s_carrid.

SUBMIT demo_selection_screen_ldb_1 WITH carrid IN s_carrid
       VIA SELECTION-SCREEN AND RETURN.

Es wird eine Selektionstabelle s_carrid unter Bezug auf die Spalte CARRID der Datenbanktabelle SPFLI angelegt. Die Felder s_carrid-low und s_carrid-high haben den gleichen Typ wie CARRID. Der Arbeitsbereich der internen Tabelle s_carrid wird gefüllt und der Tabelle angehängt. Dann wird ein Programm demo2aufgerufen. Falls demo2 mit der logischen Datenbank F1S verknüpft ist, enthält sein Selektionsbild die Felder des Selektionskriteriums CARRID aus der logischen Datenbank. Diese Felder werden mit dem Inhalt der internen Tabelle gefüllt.

 

Ende des Inhaltsbereichs