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 / 15 / 1 / 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!


Re: Methodenaufruf in SQL-WHERE-Klausel?

Beitrag von masterhash (ForumUser / 20 / 5 / 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 / 15 / 1 / 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 / 20 / 5 / 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 / 1492 / 165 / 336 ) »
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 / 20 / 5 / 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

Aktuelle Forenbeiträge

Rahmen anpassen SAP-Script
vor 32 Minuten von a-dead-trousers 8 / 154
BAPI_HU_PI_READ liefert veraltete Daten
vor 2 Stunden von RaCDigger gelöst 3 / 117
SD-Konditionen auslesen
Gestern von Geggo74 gelöst 4 / 415

Vergleichbare Themen

methodenaufruf mit bsp
von maxi » 19.04.2004 21:59
into-Klausel
von dimes » 15.07.2005 10:43
Dynamischer Methodenaufruf
von Cola » 20.08.2009 14:55
REUSE_ALV_GRID_DISPLAY_LVC -- methodenaufruf
von SaskuAc » 01.06.2016 08:48
dyn. Methodenaufruf, SUPER vs. KIND
von Icke0801 » 20.10.2015 16:43