Wherebedingung Select-Option Non-Case-Sensitive

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
19 Beiträge • Seite 1 von 2 (current) Nächste
19 Beiträge Seite 1 von 2 (current) Nächste

Wherebedingung Select-Option Non-Case-Sensitive

Beitrag von hmaxi96 (ForumUser / 77 / 13 / 1 ) »
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

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



Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitrag von hmaxi96 (ForumUser / 77 / 13 / 1 ) »
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

Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitrag von ewx (Top Expert / 4844 / 311 / 640 ) »
Dann nimm ein anderes Datenlement für die Sel-Opt.
Oder wandele alles vor dem Select in Upper Case um.

Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitrag von hmaxi96 (ForumUser / 77 / 13 / 1 ) »
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

Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitrag von ewx (Top Expert / 4844 / 311 / 640 ) »
hmaxi96 hat geschrieben: Dein anderes Datenelement zu nehmen ist leider keine Option. :down:
warum nicht?

Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
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.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitrag von DeathAndPain (Top Expert / 1939 / 257 / 412 ) »
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.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
hmaxi96


Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitrag von hmaxi96 (ForumUser / 77 / 13 / 1 ) »
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

Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
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
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitrag von DeathAndPain (Top Expert / 1939 / 257 / 412 ) »
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.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
hmaxi96


Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
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.18
Basis: 7.50

Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitrag von Romaniac (Specialist / 221 / 65 / 27 ) »
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( ).
*&---------------------------------------------------------------------*
*&      Form  append_itab
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM append_itab.
  APPEND w_trfzn TO t_trfzn.
ENDFORM.                    "append_cust
Geht nicht gibts nicht

Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitrag von thomas.klammer (ForumUser / 5 / 0 / 0 ) »
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

Re: Wherebedingung Select-Option Non-Case-Sensitive

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
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.18
Basis: 7.50

Vergleichbare Themen

4
Antw.
880
Views
CASE im SELECT
von ralf.wenzel » 13.12.2022 20:04 • Verfasst in ABAP® Core
2
Antw.
2819
Views
Select Options ist case sensitiv...
von pepedoc » 18.09.2006 13:41 • Verfasst in ABAP® Core
5
Antw.
6807
Views
Where Bedingung bei Select nicht Case sensitiv
von Phil77 » 26.12.2007 16:53 • Verfasst in ABAP® für Anfänger
3
Antw.
1565
Views
SELECT * Where Datum = select-option-low
von abapfreshman » 17.09.2021 00:24 • Verfasst in ABAP® für Anfänger
2
Antw.
2291
Views
SELECT Wertepaar Select-Option
von myllertym » 12.08.2013 10:39 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
Gestern von Bright4.5 1 / 539
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2166
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8761