Dynamischer Platzhalter im Select

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
7 Beiträge • Seite 1 von 1
7 Beiträge Seite 1 von 1

Dynamischer Platzhalter im Select

Beitrag von kaim77 (Specialist / 200 / 0 / 0 ) »
Hallo zusammen,
ich habe ein Loop aufgebaut in dem ich einen Select aufrufe, dessen Tabelle 7 Spalten hat, die sich nur am Ende nur von 01 bis 07 unterscheiden.

LOOP AT lt_id INTO driveID.

Im Loop müsste ich dann sieben mal den select ausführen.
SELECT SINGLE * FROM timedef INTO gt_timedef WHERE id = driveID-01.
bis
SELECT SINGLE * FROM timedef INTO gt_timedef WHERE id = driveID-07.

Wie kann ich einen dynamischen Platzhalter aufbauen, mit dem die Werte driveID-01 bis driveID-07 im Select übergeben werden.

Danke für di Infos.

Viele Grüße
Kaim

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


Re: Dynamischer Platzhalter im Select

Beitrag von sap_enthusiast (ForumUser / 95 / 25 / 23 ) »
Moin

Wäre so was ggf nicht effizienter?

Code: Alles auswählen.

TYPES: BEGINT OF LTY_DRIVE_ID_S,
            DRIVE_ID TYPE C LENGTH 15, "BEISPIELSWEISE
END OF LTY_DRIVE_ID_S:

TYPES: LTY_DRIVE_ID_T TYPE STANDARD TABLE OF LTY_DRIVE_ID_S WITH EMPTY KEY.

DATA:  LT_ID TYPE LTY_DRIVE_ID_T.

IF LINES( LT_ID ) > 0.
SELECT * FROM TIMEDEF 
INTO GT_TIMEDEF
FOR ALL ENTRIES IN @LT_ID
WHERE ID = @LT_ID-DRIVE_ID.

ENDIF.

Re: Dynamischer Platzhalter im Select

Beitrag von LeMinion (ForumUser / 20 / 1 / 6 ) »
Moin.

Oder, wenn es das Release erlaubt, gar dies?

Code: Alles auswählen.

SELECT * FROM timedef
  WHERE id IN ( SELECT DISTINCT id~driveID FROM @lt_id AS id )
  INTO TABLE @gt_timedef.
Allerdings muß ich gestehen, daß ich den strukturellen Aufbau Deiner Quellen und Zielstrukturen nicht so ganz durchblickt habe. 😊
Kannst Du mehr Details zum strukturellen Aufbau der beteiligten Akteure nennen? Und vielleicht dazu auch, auf welchem Release Du arbeitest?

Grüßle,
LeMinion

Re: Dynamischer Platzhalter im Select

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Sieben einzelne Single-Selects sind nicht sehr performant, weder unter Oracle noch unter Hana. Und wer sagt denn, dass es bei sieben Selects bleibt?

Besser ist es nur ein einziges SELECT auszuführen.
Dazu kann man die Lösung von LeMinion verwenden (Geht erst ab 7.51)
Oder man befüllt mit den Werten der internen Tabelle eine Range-Tabelle und verwendet diese im SELECT (Geht in allen Releases)

FOR ALL ENTRIES IN wäre auch eine Option aber da muss man immer darauf achten, dass man nicht doppelte Werte hat und man muss auch wissen, dass die daraus resultierenden SQL-Queries in Paketen zu X Einträgen (Profil Parameter) abgearbeitet werden. So kann es je nach Datenmenge zu ungünstigen Konstellationen kommen, die sich vermeiden lassen, wenn man der Datenbank auf einmal ALLE möglichen Werte übermittelt (Range-Tabelle) und sie den besten Zugriffspfad selbst auswählen kann.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Dynamischer Platzhalter im Select

Beitrag von sap_enthusiast (ForumUser / 95 / 25 / 23 ) »
a-dead-trousers hat geschrieben:
07.09.2022 22:32
FOR ALL ENTRIES IN wäre auch eine Option aber da muss man immer darauf achten, dass man nicht doppelte Werte hat
ich würde nur an der Stelle widersprechen. Der eine Vorteil von FOR ALL ENTRIES ist, dass doppelte Zeilen nicht programmatisch entfernt werden müssen.
Siehe Doku: https://help.sap.com/doc/abapdocu_752_i ... p_itab.htm

Im Nachhinein ist tatsächlich eine Range-Tabelle die bessere Option.

Re: Dynamischer Platzhalter im Select

Beitrag von ralf.wenzel (Top Expert / 3921 / 200 / 280 ) »
kaim77 hat geschrieben:
07.09.2022 17:42
ich habe ein Loop aufgebaut in dem ich einen Select aufrufe
Wird man da nicht mit Warnmeldungen von der Prüfung zugetackert, wenn man so einen Quatsch baut?

Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Dynamischer Platzhalter im Select

Beitrag von bowser (ForumUser / 4 / 0 / 0 ) »
Ich muss zwar meinen Vorrednern Recht geben, dass das Ganze performance-mäßig ziemlich schlecht ist. Dennoch müsste folgendes Coding die eigentliche Frage beantworten:

Code: Alles auswählen.

TYPES: 
    BEGIN OF lty_drive_id,
        01 TYPE numc10,
        02 TYPE numc10,
        03 TYPE numc10,
        04 TYPE numc10,
        05 TYPE numc10,
        06 TYPE numc10,
        07 TYPE numc10,
    END OF lty_drive_id.

DATA lt_id TYPE TABLE OF lty_drive_id.
DATA driveID LIKE LINE OF lt_id.
DATA lv_component(2) TYPE c.
FIELD-SYMBOLS: <f_id> TYPE any.

lt_id = VALUE #( 
    ( 01 = '1111111111' 02 = '2222222222' 03 = '3333333333' 04 = '4444444444' 05 = '5555555555' 06 = '6666666666' 07 = '7777777777' )
).

LOOP AT lt_id INTO driveID.
    DO 7 TIMES.
        UNPACK sy-index TO lv_component.
        ASSIGN COMPONENT lv_component OF STRUCTURE driveID TO <f_id>.
        CHECK sy-subrc = 0.
        SELECT SINGLE * FROM timedef INTO gt_timedef WHERE id = <f_id>.
    ENDDO.
ENDLOOP.

Seite 1 von 1

Vergleichbare Themen

3
Antw.
2623
Views
dynamischer select
von angelika » 29.04.2005 09:39 • Verfasst in ABAP® Core
9
Antw.
4955
Views
Dynamischer Select
von m.schwertle » 22.02.2008 11:09 • Verfasst in ABAP® Core
2
Antw.
1746
Views
dynamischer Select
von BesenWesen » 12.01.2005 12:45 • Verfasst in ABAP® Core
2
Antw.
1484
Views
Dynamischer Zugriff im Select
von GERDLA » 01.11.2005 14:38 • Verfasst in ABAP® Core
3
Antw.
2155
Views
Select mit dynamischer Range
von platx » 15.08.2009 10:59 • Verfasst in ABAP® für Anfänger

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.