[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Jun 2001
    Beiträge
    2.044

    dynamisches qmqry

    Hi *all

    ich habe ein QMQRY mit
    Code:
    select f1, f2, f3 from datei where
    f1 concat f2 concat f3 like &STRING
    und ein CL, das eine Variable empfängt und so:
    chgvar &STRING ('''%' *cat &VAR *TCAT '%''')
    in die &STRING Variable übergibt

    Lt. Debug steht in &STRING z.B. '%Hugo%' (incl. der hochkomma in der Var &String)

    Bei selektionen in Großbuchstaben geht das
    Bei selektionen in Gr. Klein geht das nicht

    habe das f1 concat f2 concat f3 darauf in ein Upper() gepackt
    Das ging zunächst
    Wenn ich nun aber
    Code:
    fehlt im CB
    als Var weggebe
    sagt der Debug
    Code:
    &STRING = ''%fehlt im CB%'              '
    aber ich bekomme keine Anzeige obwohl der string in F2 steht.

    Wenn ich aber
    Code:
    ZYFLD1 EQ  AAA
    weggebe bekomme ich auch eine Anzeige.

    Daraufhin habe ich das qmqry so angepasst.
    Code:
    select f1, f2, f3 from datei where
    upper(f1 concat f2 concat f3) like upper(&STRING)
    nun scheint alles zu gehen

    Was muß ich definieren, damit der upper wieder raus kann (Performance)

    Danke
    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  2. #2
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    CHGJOB SRTSEQ(*LANGIDSHR)

  3. #3
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    Hallo Pikachu,

    das wars nicht

    Zwar stand mein Job auf *hex, aber das umstellen hat nix gebracht

    noch ne Idee?
    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  4. #4
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    Zeig mal konkrete Beispieldaten und den SELECT mitsamt LIKE-Wert.

  5. #5
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    QMQRY

    Code:
    select f1, f2, f3, f4, f5 from datei where 
    f1 concat f2 concat f3 concat f4 concat f5 like &STRING
    order by rrn(datei) desc

    CLLE
    Code:
     pgm &STRING                                                     
     DCL &STRING *CHAR 30                                            
     CHGJOB SRTSEQ(*LANGIDSHR)                                       
     MONMSG CPF0000                                                  
                  CHGVAR &STRING ('''%' *CAT &STRING *TCAT '%''')    
                  STRQMQRY   QMQRY(MT940) SETVAR((STRING &STRING)) 
     ENDPGM
    Aufruf
    call cl (F4)

    Eingabe
    hme gef

    Dateiinhalt in f4

    Maßnahme gefunden

    mit
    QMQRY

    Code:
    select f1, f2, f3, f4, f5 from datei where 
    upper(f1 concat f2 concat f3 concat f4 concat f5) like upper(&STRING)
    order by rrn(datei) desc
    geht es

    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  6. #6
    Registriert seit
    Jan 2007
    Beiträge
    1.002
    CHGVAR &STRING ('''%' *CAT &STRING *TCAT '%''')
    auch wenn ich ein wenig altmodisch rüberkomme, diesen chgvar würde ich mit zwei variablen machen.
    kf

  7. #7
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    1. es muß nicht alt oder modern sein
    2. es muß funktionieren und wartbar sein
    3. wenn ich das ändere geht es auch nicht

    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  8. #8
    cbe is offline [professional_User]
    Registriert seit
    May 2005
    Beiträge
    392
    Hallo Robi,

    Zitat Zitat von Robi Beitrag anzeigen
    Was muß ich definieren, damit der upper wieder raus kann (Performance)
    ich tippe drauf, dass die Performance nicht leidet, weil der STRING im SQL nur 1x am Anfang umgesetzt werden muss.

    Ansonsten müsstest Du den String schon im Programm vorher auf GROSS umsetzen.

    Tip: Ich habe mir für sowas ein Programm geschrieben, das
    - Hochkomma drumrum macht,
    - Zeichen auf GROSS umstellt
    - enthaltene Hochkomma verdoppelt
    dann brauche ich nicht mehr nachdenken.

    Gruß, Christian

  9. #9
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    ich tippe drauf, dass die Performance nicht leidet, weil der STRING im SQL nur 1x am Anfang umgesetzt werden muss.
    Nö, glaub ich nicht
    ich hab doch 2 Upper da drin, 1 für den empfangen String und eins im where.

    Performance spielt hier auch nicht die große Geige, ich wollte nur verhindern das jemand schreibt: ... sei zufrieden, es geht doch.

    Warum zum Henker versteht das keine Gr.Klein Schrift

    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  10. #10
    cbe is offline [professional_User]
    Registriert seit
    May 2005
    Beiträge
    392
    oh, stimmt, das erste UPPER habe ich glatt überlesen :-(

    Dann hast Du wohl tatsächlich keine andere Chance, als die 2 UPPER.

    Trotzdem - vergiss die Verdopplung der Hochkomma nicht, falls Dein String solche enthält.

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Ausserdem ist der "Order by rrn(x)" nicht performanceförderlich.

    Ein Like führt immer zum Tablescan wenn es denn keine weiteren Einschränkungen gibt.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  12. #12
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    vergiss die Verdopplung der Hochkomma nicht, falls Dein String solche enthält.
    Ist bekannt, kommt aber nicht vor, BeforeTrigger verhindern das, schon wegen dem csv export.



    Ausserdem ist der "Order by rrn(x)" nicht performanceförderlich.
    Wenn das PF mit reusedltrcd(*no) erstellt wurde auch?

    Ein Like führt immer zum Tablescan wenn es denn keine weiteren Einschränkungen gibt
    Ja, stimmt. Daran habe ich bei der Performance-Bemerkung nicht gedacht.

    Trotzdem ...
    Auch wenn ich in diesem Fall die Unterscheidung GROSS/klein nicht brauche...

    Ist das Verhalten 'normal'? einstellbar? oder ein Fehler?

    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

Similar Threads

  1. Dynamisches SQL in einem CL erstellen
    By Sony in forum IBM i Hauptforum
    Antworten: 27
    Letzter Beitrag: 20-07-09, 21:48
  2. ILE RPG und dynamisches Array
    By Squall in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 10-10-06, 08:53
  3. QMQRY in CL Programm
    By Hubert in forum IBM i Hauptforum
    Antworten: 12
    Letzter Beitrag: 11-05-05, 13:25
  4. QMQRY LEFT OUTER JOIN
    By Matthias.Hayn in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 06-12-04, 13:33
  5. Gruppenwechsel und Summensätze in QMQRY?
    By Matthias.Hayn in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 28-07-04, 09:26

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •