Methodenaufruf in SQL-WHERE-Klausel?

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

Methodenaufruf in SQL-WHERE-Klausel?

Beitrag von Patrick1982 (ForumUser / 28 / 4 / 0 ) »
Moin,

ich habe folgende Frage:

In einem Programm habe ich zunächst eine Variable lv_kofi, die mit einem von 20 möglichen Werten gefüllt ist.

Dann gibt es eine Methode, die ich mit dieser Variable als Importparameter aufrufe und (je nachdem) eine Variable mit abap_true oder abap_false zurück bekomme.

Soweit so gut.

Nun habe ich eine Datenbanktabelle mit sehr vielen (> 1 Mio.) Einträgen, aus denen ich nur die Zeilen auslesen möchte, in denen die Methode für den Wert eines Feldes abap_true zurückliefert.

Kann ich das direkt in der WHERE-Klausel machen? Also so etwa wie:

Code: Alles auswählen.

SELECT feld1, feld2
      FROM db_table
      WHERE z_class=>method(lv_kofi) EQ abap_true
      INTO TABLE @DATA(lt_customer).
Hat jemand ne Idee, ob und wie das geht?

Falls nicht, wie mach ich das sonst? Es ist aus Performancegründen keine Alternative, erst alle Datensätze zu lesen und dann über einen Loop die Felder zu prüfen. Ich würde tatsächlich gern direkt nur die relevanten selektieren.

Vielen Dank!

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


Re: Methodenaufruf in SQL-WHERE-Klausel?

Beitrag von masterhash (ForumUser / 22 / 6 / 0 ) »
Hi,

ich glaube hier würde ein Code-Ausschnitt helfen. Ich bin mir nämlich ziemlich sicher, dass ich dich missverstanden habe ;)

Deine Methode, die aus lv_kofi einen true/false macht, hat noch andere Importings? Ein Feld deiner Tabelle? Ansonsten kannst du doch einfach alle deine '20 möglichen Werte' vorab mit dieser Methode prüfen und dir merken, welche einen true zurückgeben.

VG

Re: Methodenaufruf in SQL-WHERE-Klausel?

Beitrag von Patrick1982 (ForumUser / 28 / 4 / 0 ) »
Moin,
also die Methode ist ganz stumpf:

Importing: IV_KOFIZ Type E_KOFIZ
Exporting: EV_IS_PARTNER Type FLAG

Und Inhalt einfach nur

Code: Alles auswählen.

METHOD is_kofi_partner.
    IF
      iv_kofiz EQ '1A' OR
      iv_kofiz EQ '1B' OR
      iv_kofiz EQ '1C' OR
      ...
      ev_is_partner = abap_true.
    ELSE.
      ev_is_partner = abap_false.
    ENDIF.
  ENDMETHOD.
Nun habe ich eben die sehr große Datenbanktabelle, aus der ich nur die Sätze lesen möchte, wenn im Feld "kofiz" ein Wert enthalten ist, zu dem die Methode abap_true zurückliefern würde.
Irgendwie meine ich das mal gesehen zu haben, dass eine solche Prüfung auch in der WHERE-Klausel untergebracht werden kann. Ich weiß nur nicht mehr wo und wie..

Re: Methodenaufruf in SQL-WHERE-Klausel?

Beitrag von masterhash (ForumUser / 22 / 6 / 0 ) »
Ja gut. Wenn wir schon bei stumpf sind, dann schreib dir diese Werte, die einen true liefern, in eine Range. Auf diese kannst du dann in deiner WHERE Klausel abfragen. Wenn sich die Werte innerhalb der Methode regelmäßig ändern, dann muss das natürlich dynamisch passieren. Wobei es dann schlauer wäre diese kofiz Werte auf einer Customizingtabelle zu pflegen und zur Laufzeit auszulesen.

VG

Re: Methodenaufruf in SQL-WHERE-Klausel?

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Das Problem ist, dass er ja offenbar in eine Methode kapseln möchte. Dann kann man von außerhalb nicht mehr sehen, welche Werte für lv_kofi überhaupt möglich wären und dementsprechend keine passende RANGES-Tabelle basteln. Ein weiteres Beispiel, wo objektorientierte Programmierung Probleme schafft, die man ohne sie nicht hätte.

Eine Lösung könnte eine weitere Methode sein, die die RANGES-Tabelle liefert. In meinen Augen verstrickt man sich da in Overhead, aber wer's mag...

@Patrick1982: Aber das mit dem IF in der Methode ist ja nun ganz hässlich. Besser schon wäre ein CASE, optimal (bei einem Release ab 7.40) ein SWITCH.

Re: Methodenaufruf in SQL-WHERE-Klausel?

Beitrag von masterhash (ForumUser / 22 / 6 / 0 ) »
Wenn er das wirklich mit der Methode lösen möchte und keinen Zugriff auf die möglichen Werte hat, zusätzlich auch nicht die gesamte Tabelle selektieren will, dann wird es auch keine Lösung für sein Problem geben.
Wenn er die Werte vorher hat, kann er gezielt selektieren, ansonsten halt nicht :)
aber das ganze in einer einzelnen Anweisung abzufrühstücken sehe ich nicht (was ja die initial Frage war).

Seite 1 von 1

Vergleichbare Themen

3
Antw.
2308
Views
into-Klausel
von dimes » 15.07.2005 10:43 • Verfasst in ABAP® Core
7
Antw.
2983
Views
methodenaufruf mit bsp
von maxi » 19.04.2004 21:59 • Verfasst in Web-Dynpro, BSP + BHTML
8
Antw.
676
Views
Offset in Where-Klausel
von L0w-RiDer » 29.07.2022 10:25 • Verfasst in ABAP® für Anfänger
12
Antw.
3335
Views
REUSE_ALV_GRID_DISPLAY_LVC -- methodenaufruf
von SaskuAc » 01.06.2016 08:48 • Verfasst in ABAP® Core
2
Antw.
155
Views
Methodenaufruf mit TABLE OF
von lualt » 13.10.2023 12:36 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

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.

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 107
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 140