Interne Tabelle in einer Where-Klausel mitgeben

Getting started ... Alles für einen gelungenen Start.
6 Beiträge • Seite 1 von 1
6 Beiträge Seite 1 von 1

Interne Tabelle in einer Where-Klausel mitgeben

Beitrag von Karlito (ForumUser / 7 / 0 / 0 ) »
Hallo,

hab folgendes Problem:

SELECT DISTINCT tb1-feld1

INTO CORRESPONDING FIELDS OF TABLE itab1
FROM tb1
where tb1-feld1 in (itab_parameter).

Ich hab folgende Select-Anweisung innerhalb einer BSP-Applikation. Die Werte für die itab_parameter werden über ein Cookie übergeben (itab_parameter ist eine RANGE-Tabelle)

Nach dem Select-Statement bricht mir die Anwendung mit einem Server-Error ab:

"Wertetabelle für IN-itab-Operator hat unerwartetes Format"

Ich hab auch die itab_parameter als 1-spaltige Standard-Tabelle deklariert, aber da bricht mir die Seite genauso ab.

Wie muss die itab_parameter deklaiert werden, damit die Werte ohne Abbruch übernommen werden?

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo Karlito,

probier mal folgendes:

Code: Alles auswählen.

SELECT DISTINCT tb1-feld1

INTO CORRESPONDING FIELDS OF TABLE itab1
FROM tb1
where tb1-feld1 in itab_parameter.
oder

Code: Alles auswählen.

FIELD-SYMBOLS:
  <lr_param> TYPE TABLE.
ASSIGN itab_parameter TO <lt_range>.
SELECT DISTINCT tb1-feld1

INTO CORRESPONDING FIELDS OF TABLE itab1
FROM tb1
where tb1-feld1 in <lr_param>.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Karlito (ForumUser / 7 / 0 / 0 ) »
Mit beiden Versuchen immernoch der selbe Fehler.

Edit:

meine Range-Tabelle habe ich wiefolgt deklariert:

types: begin of s_itab_param,
sign TYPE c LENGTH 1,
option TYPE c LENGTH 2,
low type eqkt-eqktx,
high type eqkt-eqktx,
end of s_itab_param,

t_itab_param type range of s_itab_param.

In den Seitenattributen der BSP habe ich dann eine itab_param vom type t_itab_param erstellt.

Die Sätze der Tabelle werden wiefolgt gefüllt:
Feld sign hat immer den Wert 'I'
Feld option hat immer den Wert 'EQ'
Feld Low enthält Werte, die der Benutzer über eine DropDownBox ausgewählt hat (Auto-Kennzeichen).

Auf der Folgeseite habe ich dann auch in der gleichnamigen Tabelle die passenden Werte (Laut Debugger). Das Programm springt mir dann im Select-Statement mit der oben genannten Fehlermeldung raus.

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Karlito hat geschrieben:Mit beiden Versuchen immernoch der selbe Fehler.

Edit:

meine Range-Tabelle habe ich wiefolgt deklariert:

Code: Alles auswählen.

types:        begin of s_itab_param,
                       sign   TYPE c LENGTH 1,
                       option TYPE c LENGTH 2,
                       low    type eqkt-eqktx,
                       high   type eqkt-eqktx,
                 end of s_itab_param,

        t_itab_param type range of s_itab_param.
In den Seitenattributen der BSP habe ich dann eine itab_param vom type t_itab_param erstellt.

Die Sätze der Tabelle werden wiefolgt gefüllt:
Feld sign hat immer den Wert 'I'
Feld option hat immer den Wert 'EQ'
Feld Low enthält Werte, die der Benutzer über eine DropDownBox ausgewählt hat (Auto-Kennzeichen).

Auf der Folgeseite habe ich dann auch in der gleichnamigen Tabelle die passenden Werte (Laut Debugger). Das Programm springt mir dann im Select-Statement mit der oben genannten Fehlermeldung raus.
eine RANGE-Tabelle wird so deklariert:

Code: Alles auswählen.

TYPES:
  tr_param TYPE RANGE OF eqkt-eqktx.
* oder veraltet:
RANGES:
  tr_param FOR eqkt-eqktx.
Deine Zeilendefinition sieht jedoch etwa so aus:

Code: Alles auswählen.

SIGN|OPTION|[LOW={1+2+len(eqkt-eqktx)}]|[HIGH={1+2+len(eqkt-eqktx)}] 
Warum es zu der Fehlermeldung kommt, ist mir aber noch nicht so ganz klar.

Nachtrag:
DeathGuardian hat natürlich recht, was die Variable an sich angeht.
Bei mit fehlt also noch die DATA-Anweisung:

Code: Alles auswählen.

TYPES:
  tr_param TYPE RANGE OF eqkt-eqktx.
DATA: lr_param TYPE tr_param.
* oder veraltet:
RANGES:
  lr_param FOR eqkt-eqktx.
... mea culpa
Zuletzt geändert von ereglam am 29.01.2008 13:30, insgesamt 1-mal geändert.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
HI,

so wie du deine RANGE gemacht hast, ist totaler Bockmist! (was der Debugger beweisen dürfte)

Eine Range definiert man mit nur einer einzigen Zeile coding!
Und zwar

Code: Alles auswählen.

DATA rangetab TYPE RANGE OF type.
in deinem Fall also

Code: Alles auswählen.

DATA itab_parameter TYPE RANGE OF eqkt-eqktx.
Mehr nicht!
Nur dadurch bekommst du eine Rangetabelle (mit SIGN OPTION LOW HIGH) die auch der SQL mag.


P.s.
So sind nämlich grad deine ITAB aus:
SIGN
OPTION
LOW-SIGN
LOW-OPTION
LOW-LOW
LOW-HIGH
HIGH-SIGN
HIGH-OPTION
HIGH-LOW
HIGH-HIGH

Beitrag von Karlito (ForumUser / 7 / 0 / 0 ) »
Das war der Fehler!

Danke Euch!

Seite 1 von 1

Vergleichbare Themen

1
Antw.
2069
Views
WHERE Klausel mit Komponenten einer internen Tabelle
von pohlmann-schwarza » 11.07.2008 11:25 • Verfasst in ABAP Objects®
4
Antw.
4190
Views
5
Antw.
5164
Views
Inhalt interne Tabelle an andere interne Tabelle übergeben
von L0w-RiDer » 30.01.2020 16:28 • Verfasst in ABAP® für Anfänger
5
Antw.
4944
Views

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.