gelöst Wherebedingung Select-Option Non-Case-Sensitive


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

gelöst Wherebedingung Select-Option Non-Case-Sensitive

Beitragvon hmaxi96 » 15.01.2018, 12:31

Hallo,

ich lese aus der Tabelle "zsd_sofa2" mit der Select-Option "s_trnum".
Code: Alles auswählen
SELECT SINGLE * FROM zsd_sofa2 INTO CORRESPONDING FIELDS OF ms_alv
        WHERE id = ms_alv-id
          AND cal_trnum IN s_trnum

Das Problem ist, dass auf die Groß- und Kleinschreibung geachtet wird.
Die Domäne des Datenelements (Typ von s_trnum) erlaubt in der Definition Kleinbuchstaben.

Nun ist meine Frage: Kann man den Select Single so anpassen, dass er Non-Case-Sensitive ist?
Ohne am Datenelement/Domäne was zu ändern.

Danke im Voraus.

Gruß
Max
Investor im Bereich Kryptowährungen.
Bei Interesse oder Fragen stehe ich Ihnen gerne zur Verfügung.

https://www.xing.com/profile/Maximilian_Hauer3
hmaxi96
ForumUser
 
Beiträge: 77
Registriert: 02.11.2015, 12:02
Dank erhalten: 1 mal
Ich bin: Entwickler/in

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitragvon ewx » 15.01.2018, 13:04

ewx
Top Expert
 
Beiträge: 3779
Registriert: 04.08.2003, 19:55
Wohnort: Schleswig-Holstein
Dank erhalten: 311 mal

Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitragvon hmaxi96 » 15.01.2018, 14:42

Erstmal Danke für die Antwort.
Aber da es sich bei mir um eine Select-Option handelt müsste ich diese immer komplett zerlegen und neu aufbauen. Sprich: Performance = :down:
Da es sich um sehr viele Eingaben handelt entspricht das leider eher weniger den Erwartungen.
Gibt es vllt sonst noch eine Möglichkeit?
Investor im Bereich Kryptowährungen.
Bei Interesse oder Fragen stehe ich Ihnen gerne zur Verfügung.

https://www.xing.com/profile/Maximilian_Hauer3
hmaxi96
ForumUser
 
Beiträge: 77
Registriert: 02.11.2015, 12:02
Dank erhalten: 1 mal
Ich bin: Entwickler/in

Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitragvon ewx » 15.01.2018, 14:48

Dann nimm ein anderes Datenlement für die Sel-Opt.
Oder wandele alles vor dem Select in Upper Case um.
ewx
Top Expert
 
Beiträge: 3779
Registriert: 04.08.2003, 19:55
Wohnort: Schleswig-Holstein
Dank erhalten: 311 mal

Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitragvon hmaxi96 » 15.01.2018, 14:55

Habe davor alles in Großbuchstaben umgewandelt, der UPPER im Select funktioniert aber leider nicht. :down:
Code: Alles auswählen
SELECT SINGLE * INTO CORRESPONDING FIELDS OF ms_alv FROM zsd_sofa2
   WHERE UPPER( cal_trnum ) IN s_trnum.

"CAL_TRNUM" ist kein gültiger Vergleichsoperator.


Dein anderes Datenelement zu nehmen ist leider keine Option. :down:
Investor im Bereich Kryptowährungen.
Bei Interesse oder Fragen stehe ich Ihnen gerne zur Verfügung.

https://www.xing.com/profile/Maximilian_Hauer3
hmaxi96
ForumUser
 
Beiträge: 77
Registriert: 02.11.2015, 12:02
Dank erhalten: 1 mal
Ich bin: Entwickler/in

Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitragvon ewx » 15.01.2018, 15:09

hmaxi96 hat geschrieben:Dein anderes Datenelement zu nehmen ist leider keine Option. :down:

warum nicht?
ewx
Top Expert
 
Beiträge: 3779
Registriert: 04.08.2003, 19:55
Wohnort: Schleswig-Holstein
Dank erhalten: 311 mal

Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitragvon ralf.wenzel » 15.01.2018, 17:30

ewx hat geschrieben:Dann nimm ein anderes Datenlement für die Sel-Opt.
Oder wandele alles vor dem Select in Upper Case um.


Das wäre auch mein Tipp gewesen:

Code: Alles auswählen
LOOP AT s_trnum ASSIGNING FIELD-SYMBOL( <trnum> ).
  <trnum> = to_upper( <trnum> ).
ENDLOOP.


und der Keks ist gefrühstückt. Geht sicher auch als Einzeiler mit FOR, aber mit dem Ding stehe ich auf Kriegsfuß ;)



Ralf

PS:

s_trum[] = value #( for <i> in s_trum[] ( to_upper( <i>-s_trum ) ). dürfte funktionieren.... Ich sitze leider gerade nicht an einem 7.40er System, um das testen zu können. So hat man einen einfachen Einzeiler statt eines Codingblocks für eine einfache Aufgabe.
ralf.wenzel
Top Expert
 
Beiträge: 3242
Registriert: 18.09.2004, 13:03
Wohnort: Hamburg
Dank erhalten: 190 mal
Ich bin: Freiberufler/in

Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitragvon DeathAndPain » 16.01.2018, 12:08

Soweit ich den Threadersteller verstehe, ist ihm damit nicht geholfen, denn dann stehen in seiner internen RANGES-Tabelle zwar alle Werte in Großbuchstaben, aber auf der Datenbank stehen sie immer noch (teilweise) in Kleinbuchstaben, so dass der SELECT nichts findet.

Die RANGES-Tabelle in Großbuchstaben zu wandeln, bringt ihn also nur weiter, wenn es auch eine mit einer RANGES-Tabelle funktionierende Variante des UPPER() im WHERE-Block des SELECTs gibt. Ohne es selbst ausprobiert zu haben, interpretiere ich seine Worte dahingehend, dass genau das nicht funktioniert.

Für diese Nachricht hat DeathAndPain einen Dank bekommen :
hmaxi96
DeathAndPain
Expert
 
Beiträge: 814
Registriert: 05.05.2006, 10:14
Dank erhalten: 189 mal
Ich bin: Entwickler/in

Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitragvon hmaxi96 » 16.01.2018, 12:11

Erstmal Danke! :)
Der Inhalt meiner Select-Option ist ja bereits großgeschrieben. :wink:
Das Problem ist nur dass der UPPER beim Select nicht funktioniert.
Müsste es nun irgendwie schaffen, den Text aus meiner DB-Tabelle in Großtext rauszulesen, ohne dass ich beim Datenelement den Haken für Kleinschreibung entferne und die DB-Tabelle anpasse. (Hat den Grund, dass auf diversen anderen Systemen[nicht SAP] auch Case-Sensitive gearbeitet wird)
Die SAP-Releaseversion ist übrigens 740.
[edit: Es ist genauso wie DeathAndPain es beschrieben hat. :up: ]
Investor im Bereich Kryptowährungen.
Bei Interesse oder Fragen stehe ich Ihnen gerne zur Verfügung.

https://www.xing.com/profile/Maximilian_Hauer3
hmaxi96
ForumUser
 
Beiträge: 77
Registriert: 02.11.2015, 12:02
Dank erhalten: 1 mal
Ich bin: Entwickler/in

Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitragvon ralf.wenzel » 16.01.2018, 12:23

DeathAndPain hat geschrieben:Soweit ich den Threadersteller verstehe, ist ihm damit nicht geholfen, denn dann stehen in seiner internen RANGES-Tabelle zwar alle Werte in Großbuchstaben, aber auf der Datenbank stehen sie immer noch (teilweise) in Kleinbuchstaben, so dass der SELECT nichts findet.


Jetzt kapiere ich das erst.......


Ralf
ralf.wenzel
Top Expert
 
Beiträge: 3242
Registriert: 18.09.2004, 13:03
Wohnort: Hamburg
Dank erhalten: 190 mal
Ich bin: Freiberufler/in

Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitragvon DeathAndPain » 16.01.2018, 13:07

Das Problem ist nur dass der UPPER beim Select nicht funktioniert.
Müsste es nun irgendwie schaffen, den Text aus meiner DB-Tabelle in Großtext rauszulesen, ohne dass ich beim Datenelement den Haken für Kleinschreibung entferne und die DB-Tabelle anpasse. (Hat den Grund, dass auf diversen anderen Systemen[nicht SAP] auch Case-Sensitive gearbeitet wird)

Was ich an der Stelle machen würde, ist, die gesamte Tabelle zsd_sofa2 (oder die relevanten Spalten davon) in eine interne Puffertabelle vom Typ SORTED TABLE mit auf dem Text definiertem Schlüssel einzulesen, diese nach Großbuchstaben zu wandeln und dann darin zu suchen. Je nachdem, wie häufig Du auf diese Weise suchen musst, kann das sogar Performancevorteile bringen, und heutige Server haben so viel Hauptspeicher, dass das bei den allermeisten Tabellen kaum noch ein Thema ist.

Sollte die Tabelle von der Spaltenanzahl her doch gar zu voluminös sein, dann könntest Du alternativ nur die zum Primärschlüssel der Tabelle gehörenden Spalten sowie die Textspalten, in denen Du suchen willst, in eine interne Tabelle einlesen und darin dann den Text in Großbuchstaben wandeln. Effektiv schaffst Du Dir damit eine Art Indextabelle im Hauptspeicher, in der Du den Primärschlüssel der Dich interessierenden Spalten suchst, und die holst Du dann per SELECT SINGLE aus der Datenbank.

Übrigens: Die SAP geht in solchen Fällen so vor, dass sie den Text doppelt in der Datenbanktabelle vorhält: einmal in der gewünschten Groß/Kleinschreibung und dann noch ein zweites Mal alles in Großbuchstaben. Auf letztere Spalte packt die SAP dann einen sekundären Datenbanktabellenindex und kann dann damit suchen.

Wenn Du Dir in der SE11 beispielsweise mal die Tabellen MAKT oder PA0002 anschaust, dann siehst Du, was ich meine. Spart vielleicht keinen Datenbankspeicher, ist aber ein universeller Weg zur Lösung des Problems. Da es sich in Deinem Fall um eine Z-Tabelle handelt, könnte die Ergänzung einer solchen Matchcode-Textspalte der richtige Lösungsweg sein.

Für diese Nachricht hat DeathAndPain einen Dank bekommen :
hmaxi96
DeathAndPain
Expert
 
Beiträge: 814
Registriert: 05.05.2006, 10:14
Dank erhalten: 189 mal
Ich bin: Entwickler/in

Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitragvon a-dead-trousers » 16.01.2018, 14:42

Alternativ kann man in 7.40 die CDS-Views benutzen (via Eclipse) und da können die Datenbank-Schlüsselwörter ala UPPPER bereits verwendet werden.
In ABAP schaut dann das Ganze aus wie eine normale Datenbank-View und man kann es mit einem RANGE abfragen.
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.07
Basis: 7.40
a-dead-trousers
Top Expert
 
Beiträge: 3090
Registriert: 07.02.2011, 13:40
Dank erhalten: 762 mal
Ich bin: Entwickler/in

Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitragvon Romaniac » 16.01.2018, 14:53

Also ich habe das vor langer Zeit mal mit SQL gelöst:

Code: Alles auswählen
REPORT  ztest_SQL.
TYPES:
  BEGIN OF tp_trfzn,
    ort01            TYPE ort01,
    zzv_apo_ablocort TYPE zzv_apo_ablocort,
    trfzn            TYPE trfzn,
  END OF tp_trfzn.

DATA:
  r_salv  TYPE REF TO cl_salv_table,
  t_trfzn TYPE TABLE OF tp_trfzn,
  w_trfzn TYPE tp_trfzn,
  v_mandt TYPE mandt.

PARAMETERS:
  p_ort01 TYPE ort01 DEFAULT 'CLAre'.

START-OF-SELECTION.
  v_mandt = sy-mandt.

  EXEC SQL PERFORMING APPEND_ITAB.
    SELECT ORT01, ZZV_APO_ABLOCORT, TRFZN
      FROM ZVFK_FRACHT_ZONE
      INTO :W_TRFZN
      WHERE MANDT                 = :V_MANDT
        and UPPER(ORT01) LIKE upper(:P_ORT01)
  ENDEXEC.

  CALL METHOD cl_salv_table=>factory
    IMPORTING
      r_salv_table = r_salv
    CHANGING
      t_table      = t_trfzn.
  r_salv->display( ).
*&amp;---------------------------------------------------------------------*
*&amp;      Form  append_itab
*&amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM append_itab.
  APPEND w_trfzn TO t_trfzn.
ENDFORM.                    "append_cust
Geht nicht gibts nicht
Romaniac
ForumUser
 
Beiträge: 90
Registriert: 20.03.2017, 10:31
Wohnort: Augsburg
Dank erhalten: 11 mal
Ich bin: Freiberufler/in

Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitragvon thomas.klammer » 14.08.2018, 06:30

Ist es möglich mit exec sql eine dynamische where-bedingung zu haben?
Für mich ist es unglaublich, dass man 751 benötigt um eine simple Funktion wie "upper" nutzen zu können.

lg Thomas
thomas.klammer
ForumUser
 
Beiträge: 5
Registriert: 13.08.2018, 16:12
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitragvon a-dead-trousers » 14.08.2018, 07:18

thomas.klammer hat geschrieben:Ist es möglich mit exec sql eine dynamische where-bedingung zu haben?
Für mich ist es unglaublich, dass man 751 benötigt um eine simple Funktion wie "upper" nutzen zu können.

CDS-Views?
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.07
Basis: 7.40
a-dead-trousers
Top Expert
 
Beiträge: 3090
Registriert: 07.02.2011, 13:40
Dank erhalten: 762 mal
Ich bin: Entwickler/in

Nächste

Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
s4hana-cloud
vor 8 Stunden von sap_inchen 1 Antw.
500 Internal Server Error
vor 16 Stunden von zzcpak 1 Antw.
Dokumentinformationen lesen vom DVS
vor 18 Stunden von Tron 4 Antw.
Tabs innerhalb von Tabs
vor 19 Stunden von ewx 4 Antw.
Fakturierungsplan in Kontrakten ändern
vor 15 Stunden von DeathAndPain 1 Antw.

  Ähnliche Beiträge beta
SELECT Wertepaar Select-Option
12.08.2013, 10:58 von a-dead-trousers 2 Antw.
Select-Option aus DSO Tabelle
08.05.2013, 13:03 von patlau 1 Antw.
dynamische Where -Bedingung mit Select-Option
30.08.2006, 14:43 von BesenWesen 8 Antw.
Select Option dynamisch erstellen
06.05.2008, 15:48 von ewx 12 Antw.
Suchhilfe an Select-Option anbinden
05.09.2008, 07:58 von xxxx 9 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], Google Adsense [Bot]