[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    May 2007
    Beiträge
    295

    Question CLP: SQL-Statement ausführen

    Schönen Nachmittag!

    Ich habe ein Problem, wo ich nicht weiterkomme und eventuell könnt ihr mich in die richtige Richtung "lotsen".

    Wir haben einen individuellen CMD "RUNSQL" um SQL-Statements auszuführen. Ich glaub dieser Command macht nix anderes als der RUNSQLSTM-Command - is ja egal.

    Code:
    0013.31              RUNSQL     REQUEST('SELECT MLMTXT, MLCDAT, MLNAME +  
    0013.32                           FROM PFPF/PETER2 WHERE MLMTXT LIKE +    
    0013.33                           ''%' *CAT &ORNO *CAT ''%' AND +         
    0013.34                           MLCDAT = '' *CAT &ORDA *CAT '') +       
    0013.35                           OUTPUT(*OUTFILE) OUTFILE(QTEMP/HOGTMP) +
    0013.36                           MEMBER(*REPLACE/*FIRST)
    Bei diesem Statement komme ich nicht weiter, da ich Variablen benütze und damit die beiden Char-Felder überprüfen möchte (siehe LIKE etc).
    Doch der SEU mäckert die ganze Zeit wegen den " ' " die ihm nicht passen - ich brauch diese aber für die CHAR-Felder.
    Das Statement sollte mir die Datensätze in eine Tabelle schreiben, wo die Auftragsnummer im Text vorkommt und das Erstellungsdatum passt.

    Wie kann ich dieses realisieren?

    Danke im Voraus!
    Greets
    Christian
    Anwendungsentwickler und ein bissal Systemoperator
    https://github.com/prsbrc
    LinkedIn

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Hallo,

    einzelne Hochkommate innerhalb eines Strings müssen immer verdoppelt werden:

    PHP-Code:
    0013.31              RUNSQL     REQUEST('SELECT MLMTXT, MLCDAT, MLNAME +  
    0013.32                           FROM PFPF/PETER2 WHERE MLMTXT LIKE +    
    0013.33                           '''
    %' *CAT &ORNO *CAT '''%' AND +         
    0013.34                           MLCDAT = ''' 
    *CAT &ORDA *CAT ''') +       
    0013.35                           OUTPUT(*OUTFILE) OUTFILE(QTEMP/HOGTMP) +
    0013.36                           MEMBER(*REPLACE/*FIRST) 
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Wenn &ORNO Leerzeichen am Ende enthält würde ich TCAT verwenden !
    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

  4. #4
    Registriert seit
    May 2007
    Beiträge
    295
    Hi!

    Nö, die Variable &ORNO enthällt keine Leerzeichen. Sonst ist es würdig und recht wenns abstürzen würde Leerzeichen darf es nicht geben ...

    Es schaut jetzt so aus - mäckert allerdings immer noch:

    Code:
    0013.31              RUNSQL     REQUEST('SELECT MLMTXT, MLCDAT, MLNAME +                
    0013.32                           FROM PFPF/PETER2 WHERE MLMTXT LIKE +                  
    0013.33                           '''%' *CAT &ORNO *CAT '''%' AND +                     
    0013.34                           MLCDAT = ''' *CAT &ORDA *CAT ''') +                   
    0013.35                           OUTPUT(*OUTFILE) OUTFILE(QTEMP/HOGTMP) +              
    0013.36                           MEMBER(*REPLACE/*FIRST)
    Folgende 3 Meldungen bringt der SEU:
    Code:
     
    Zeichen '%' nach Zeichenfolge ''SELECT ML' ist ungültig.
    Kein dazugehöriges Hochkomma gefunden.
    Keine dazugehörige runde Klammer gefunden.
    Ich kann mir da keinen Reim mehr darauf machen.

    Muss aber dazusagen das ich auch kein CLP(rofi) bin
    Greets
    Christian
    Anwendungsentwickler und ein bissal Systemoperator
    https://github.com/prsbrc
    LinkedIn

  5. #5
    Registriert seit
    Aug 2004
    Beiträge
    923
    mhh... diese Hochkommageschichte ist immer nervig.

    Mach doch mal noch eine zusätzliche Variabel (ähnlich wie &ORDA) in der nur % drinsteht. Also eine 1 CHAR. Die nennste &PROZ oder so . Und die verketteste dann anstelle dessen. Dann sparste diese Hochkommasache.

    kuempi
    Last edited by kuempi von stein; 30-07-07 at 14:30. Grund: tippelfehler

  6. #6
    Registriert seit
    May 2007
    Beiträge
    295

    Talking

    YESS! Haut hin

    Code:
    0013.12              CHGVAR     VAR(&XSQL) VALUE('SELECT MLMTXT, MLCDAT, +     
    0013.13                           MLNAME FROM PFPF/PETER2 WHERE MLMTXT LIKE +  
    0013.14                           ''' *CAT &PRZZ *CAT &ORNO *CAT &PRZZ *CAT +  
    0013.15                           ''' AND MLCDAT = ''' *CAT &ORDA *CAT '''')   
    0013.21                                                                        
    0013.31              RUNSQL     REQUEST(&XSQL) OUTPUT(*OUTFILE) +              
    0013.35                           OUTFILE(QTEMP/HOGTMP) MEMBER(*REPLACE/*FIRST)
    Danke!
    Greets
    Christian
    Anwendungsentwickler und ein bissal Systemoperator
    https://github.com/prsbrc
    LinkedIn

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Man muss die HK's nur korrekt zählen

    Code:
    0013.31              RUNSQL     REQUEST('SELECT MLMTXT, MLCDAT, MLNAME +                
    0013.32                           FROM PFPF/PETER2 WHERE MLMTXT LIKE +                  
    0013.33                           ''%' *CAT &ORNO *CAT '%'' AND +                     
    0013.34                           MLCDAT = ''' *CAT &ORDA *CAT '''') +                   
    0013.35                           OUTPUT(*OUTFILE) OUTFILE(QTEMP/HOGTMP) +              
    0013.36                           MEMBER(*REPLACE/*FIRST)
    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

  8. #8
    Registriert seit
    May 2004
    Beiträge
    444
    Noch ein kleiner Tipp wenns mal wieder unüberschaubar wird ;-)

    Immer wenn ich in einem String ein Hochkomma benötige mache ich " (doppelte Anführungszeichen) und ersetze diese dann am Schluss wenn ich fertig bin mit '' (zwei aufeinanderfolgende Hochkommas).
    Ist beim Eintippen übersichtlicher.

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. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  3. SQL Statement
    By juergenkemeter in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 15-11-04, 12:15
  4. SQL Statement
    By Pia in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 18-04-02, 15:24
  5. SQL-Befehle ausführen ohne SQL auf der Maschine, wie?
    By Carsten in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 15-10-01, 19:53

Berechtigungen

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