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

    RUNSQLSTM - Problem

    Hallo habe hier ein SQL welches als TXT in einer Source abgelegt ist:

    PHP-Code:
    insert into jrnanz/SOURCES1                                
    SELECT 1 
    ,'     A            '|| WHFLDI||'   '||       
    case 
    when whfldd=0 then substr(digits(whfldb) , 3)     
    else 
    ' '||digits(whflddend                               
    ||whfldt||                                                 
    case 
    when whfldp=0 then '  '                               
    else substr(digits(WHFLDp) , 2end                    
    ||'       TEXT('||''''|| trim(left(WHFTXT 28))||''''||')'
    from jrnanz/fields 
    dieses wird dann aus einem CL mit dem Befehl RUNSQLSTM aufgerufen!


    a) kann mir jemand sagen, was die "||" bedeuten und wie ich sie ersetzen kann/muß?
    b) die Zeile mit TEXT('||.... ermittelt die Beschreibung (TEXT) des Feldes !!! -> wenn jetzt kein Text vorhanden ist, dann steht anschließend in der Source nur "TEXT('')". Wenn die Source mit CRTPFM umgewandelt wird, bekomme ich einen Fehler -> wie kann ich das umgehen

  2. #2
    Registriert seit
    Aug 2004
    Beiträge
    923
    Zitat Zitat von muadeep
    ...kann mir jemand sagen, was die "||" bedeuten und wie ich sie ersetzen kann/muß?...
    Hello,

    das müsste ein *CAT sein.
    Stichwort Ersatzoperator.

    k.

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    309
    Hab's mal abgändert dann bekomme ich beim Ausführen mit RUNSQLSTM folgenden Fehler:

    PHP-Code:
    Satz    *...+... ...+... ...+... ...+... ...+... ...+... ...+... ...+... 8   FLGNRLetzte Änderung 
          1     insert into jrnanz
    /SOURCES1                                                                           
          2     SELECT 1 
    ,'     A            ' *cat WHFLDI *cat '   ' *cat                                        
          3     
    case when whfldd=0 then substr(digits(whfldb) , 3)                                                
          
    4     else ' ' *cat digits(whflddend                                                                      
          5     
    *cat whfldt *cat                                                                                      
          6     
    case when whfldp=0 then '  '                                                                          
          
    7     else substr(digits(WHFLDp) , 2end                                                               
          8     
    *cat '       TEXT('*cat '''' *cat trim(left(WHFTXT 28)) *cat '''' *cat ')'                          
          
    9     from jrnanz/fields                                                                                    
                                   
    * * * * *  E N D E  D E R  Q U E L L E * * * * *                                   
    SQL0104  30       2  Position 52 Token ungültigGültige Token: , FROM INTO.                                    
                        
    Nachrichtenzusammenfassung                                                                    
      Gesamt    Info   Warnung      Fehler  Wertigk
    Beendigung                                                       
          1        0         0          0        1         0                                                          
    Fehler der Wertigkeitsstufe 30 in Quelle gefunden


  4. #4
    Registriert seit
    Aug 2004
    Beiträge
    923
    ähmm...

    nee nee, das geht wohl so nicht.
    *CAT ist ja eigentlich nen CL-Operator.
    Weil das so nicht geht, hat ja der Vorgänger eben || genommen.
    Eventuell geht "concat" ??

    Zum Thema RUNSQLSTM gibts hier im Forum reichlich Stoff!

    k.

    Sodele, habe noch mal etwas geblättert.
    Statt || sollte concat gehen.
    Aber warum lässt Du das nicht einfach so?
    Dein Hauptptoblem scheint ja nur das leere "Text" zu sein?
    Wie man das gebacken bekommt weiss ich nicht, da musst Du mal auf ne/n SQL-Profi warten...

    k.

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

    mit || kann es Probleme geben. In manchen Umgebungen müssen stattdessen zwei !! angegeben werden.
    Solange es nur um SQL geht ist die sicherste Lösung ist, wie Kuempi sagt, concat statt der || zu verwenden. Das ist international und gibt keine Probleme.

    Was Dein Problem mit dem Text angeht. Du darfst den Text nur ausgeben, wenn auch einer angegeben wurde, d.h. Du benötigst eine zusätzlich CASE-Anweisung:

    Etwa so (nicht getestet, da ich z.Z. keinen Zugriff auf eine iSeries habe)
    PHP-Code:
    Concat Case When Length(Trim(Left(WHFTXT28) <> 
                Then 
    '       TEXT(' concat 
                     
    '''' concat trim(left(WHFTXT 28)) concat '''' 
                     
    concat ')'
                
    End 

    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

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    309
    ok, danke schön

    jetzt wär da noch das Problem dass die Source so erstellt wird:

    PHP-Code:
    A            MANDANT_ID    09B         TEXT(''
    und dass ich dann beim umwandeln mit CRTPF immer eine Fehlermeldung bekommen!

  7. #7
    Registriert seit
    Aug 2004
    Beiträge
    923
    Hello again,

    das leere Textfeld könnte man vermutlich mit
    concat trim(left(WHFTXT , 27)) concat ' ' concat '''' concat ')' umgehen. Weiss gerade nicht, ob die Syntax korrekt ist, aber du hängst einfach grundsätzlich noch ne Leerstelle hinten ran, wenn Du verstehst was ich meine...


    Und die genaue Fehlermeldung wäre interassant, falls es nicht geht.

    In diesem Sinne...

    k.

    Noch ein kleiner Nachtrag:
    Die Lösung von Birgitta würde ich bevorzugen so grundsätzlich.
    Ob man ein *Blank überhaupt mit concat ranbekommt, weiss ich nicht, im Zweifelsfalle eben irgendein doofes Zeichen nehmen (Punkt?)...

    Und noch ne Frage: was wird das eigentlich?
    Sieht mir nach Journal und DSPFFD usw. aus....
    So eine Art Ablage in ne File was an Infos aus dem Journal kommt?

  8. #8
    Registriert seit
    Aug 2001
    Beiträge
    309
    Hier mal die Fehlermeldung mit dem Eingebauten Statment
    (hoffe es ist so richtig!)

    PHP-Code:
    Satz    *...+... ...+... ...+... ...+... ...+... ...+... ...+... ...+... 8   FLGNRLetzte Änderung  
          1     insert into jrnanz
    /SOURCES1                                                                            
          2     SELECT 1 
    ,'     A            '|| WHFLDI||'   '||                                                   
          
    3     case when whfldd=0 then substr(digits(whfldb) , 3)                                                 
          
    4     else ' '||digits(whflddend                                                                           
          5     
    ||whfldt||                                                                                             
          
    6     case when whfldp=0 then '  '                                                                           
          
    7     else substr(digits(WHFLDp) , 2end                                                                
          8     
    ||'       TEXT('||''''|| trim(left(WHFTXT 28))||''''||')'                                            
          
    9     Concat Case When Length(Trim(Left(WHFTXT28) <> 0                                                     
         10                 Then 
    '       TEXT(' concat                                                                 
         11                      
    '''' concat trim(left(WHFTXT 28)) concat ''''                                       
         
    12                      concat ')' end                                                                        
         13     from jrnanz
    /fields                                                                                     
                                   
    * * * * *  E N D E  D E R  Q U E L L E * * * * *                                    
    SQL0104  30       9  Position 51 Token <> ungültigGültige Token: ).                                              
                        
    Nachrichtenzusammenfassung                                                                     
      Gesamt    Info   Warnung      Fehler  Wertigk
    Beendigung                                                        
          1        0         0          0        1         0                                                           
    Fehler der Wertigkeitsstufe 30 in Quelle gefunden

    JobLog:
    Befehl RUNSQLSTM fehlgeschlagen.
    Fehler bei Ausführung des Verarbeitungsbefehls; Einzelheiten enthält das Jobprotokoll.


    Sieht mir nach Journal und DSPFFD usw. aus....
    -> stimmt genau
    (es handelt sich um ext. Pgm(e). welche in einer bestimmten Bibl. arbeiten, dort ist ein Journal auf an, und ich wollte mal genauern sehen, was da denn so alles (je Datei) gemacht wird)

  9. #9
    Registriert seit
    Aug 2004
    Beiträge
    923
    Also mit der "Fehlermeldung" kann ich nix anfangen. Ist mehr nen Fall für Brigitta oder so...

    Hier mal ein "manueller" Ablauf um ein Journal auszuwerten...

    DSPJRN JRN(Journalname)
    FROMTIME(220805 150000)
    TOTIME(220805 160000)
    OUTPUT(*OUTFILE)
    OUTFILE(QTEMP/TYPE1)
    ENTDTALEN(*CALC)

    Dann Datei erstellen JRNTYP1 in QTEMP

    *
    A R QJORDJE
    *
    A JOENTL 5P 0 COLHDG('EINTRAGSLÄNGE')
    A JOSEQN 10P 0 COLHDG('FOLGENUMMER')
    A JOCODE 1A COLHDG('JOURNALCODE')
    A JOENTT 2A COLHDG('EINTRAGSART')
    A JODATE 6A COLHDG('DATUM')
    A JOTIME 6P 0 COLHDG('UHRZEIT')
    A JOJOB 10A COLHDG('JOBNAME')
    A JOUSER 10A COLHDG('BENUTZERNAME')
    A JONBR 6P 0 COLHDG('JOBNUMMER')
    A JOPGM 10A COLHDG('PROGRAMMNAME')
    A JOOBJ 10A COLHDG('OBJEKTNAME')
    A JOLIB 10A COLHDG('OBJEKTBIBLIOTHEK')
    A JOMBR 10A COLHDG('TEILDATEINAME')
    A JOCTRR 10P 0 COLHDG('GEÄNDERTE ANZAHL OD.')
    A JOFLAG 1A COLHDG('MARKIERUNG: 1 ODER 0')
    A JOCCID 10P 0 COLHDG('COMMIT-ZYKLUS-ID')
    A JOINCDAT 1A COLHDG('UNVOLLST.')
    A JOMINESD 1A COLHDG('MINIM. ESD')
    A JORES 18A COLHDG('NICHT VERWENDET')
    A JOESD 2000H COLHDG('INHALT')
    A*

    Dann..

    CPYF FROMFILE(QTEMP/TYPE1)
    TOFILE(QTEMP/JRNTYP1)
    MBROPT(*REPLACE)
    FMTOPT(*MAP)

    Dann Datei erstellen JRNTMP1 wie JRNTYP1 aber statt JOESD die Felder der
    betreffenden echten Datei anhängen.

    Dann...

    CPYF FROMFILE(QTEMP/JRNTYP1)
    TOFILE(QTEMP/JRNTMP1)
    MBROPT(*REPLACE)
    FMTOPT(*NOCHK)


    Fertig! Auswerten mit z.B. SQL...


    Ich hoffe Du kommst klar damit.

    kuempi

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

    warum hast Du die Text-Angabe doppelt codiert?

    Das korrekte Statement müsste so aussehen:
    PHP-Code:
    insert into jrnanz/SOURCES1                                                                            
       SELECT 1 
    ,'     A            ' concat WHFLDI concat '   ' concat                                             
              
    case when whfldd=0 then substr(digits(whfldb) , 3)                                           
                   else 
    ' 'concat digits(whflddend                                                                     
              concat whfldt concat                                                                                       
              
    case when whfldp=0 then '  '                                                                     
                   
    else substr(digits(WHFLDp) , 2end                                                          
              concat
              
    Case When Length(Trim(Left(WHFTXT28) <> 0                                               
                   Then 
    '       TEXT(' concat                                                           
                        
    '''' concat trim(left(WHFTXT 28)) concat ''''                                 
                        
    concat ')' end                             
         from jrnanz
    /fields 
    Übrigens mit der skalaren Funktion Space(Zahl) kann man eine beliebige Anzahl *Blanks generieren: z.B. bei Space(5) werden 5 aufeinanderfolgende Blanks generiert.


    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

  11. #11
    Registriert seit
    Aug 2001
    Beiträge
    309
    bekomme jetzt folgenden Fehler:

    PHP-Code:
    Satz    *...+... ...+... ...+... ...+... ...+... ...+... ...+... ...+... 8   FLGNRLetzte Änderung
          1 insert into jrnanz
    /SOURCES1                                                                              
          2    SELECT 1 
    ,'     A            ' concat WHFLDI concat '   ' concat                                  
          3           
    case when whfldd=0 then substr(digits(whfldb) , 3)                                         
          
    4                else ' 'concat digits(whflddend                                                         
          5           concat whfldt concat                                                                           
          6           
    case when whfldp=0 then '  '                                                                   
          
    7                else substr(digits(WHFLDp) , 2end                                                   
          8           concat                                                                                         
          9           
    Case When Length(Trim(Left(WHFTXT28) <> 0                                                    
         10                Then 
    '       TEXT(' concat                                                                
         11                     
    '''' concat trim(left(WHFTXT 28)) concat ''''                                      
         
    12                     concat ')' end                                                                       
         13      from jrnanz
    /fields                                                                                  
                                   
    * * * * *  E N D E  D E R  Q U E L L E * * * * *                                  
    5722SS1 V5R3M0 040528            SQL-Anweisungen ausführen         SQL                                01.09.06 09
    Satz    
    *...+... ...+... ...+... ...+... ...+... ...+... ...+... ...+... 8   FLGNRLetzte Änderung
    MSG ID  WTK  SATZ  TEXT                                                                                          
    SQL0104  30       9  Position 50 Token 
    <> ungültigGültige Token: ).
                        
    Nachrichtenzusammenfassung             
      Gesamt    Info   Warnung      Fehler  Wertigk
    Beendigung
          1        0         0          0        1         0   
    Fehler der Wertigkeitsstufe 30 in Quelle gefunden


  12. #12
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Hallo,

    vielleicht solltest du mal genauer beschreiben, was du eigentlich machst und was du damit erreichen willst. Mir scheint, dass das mit einem relativ einfachen
    create table as
    (select joccid, joentt, ..., b.*
    from xxxjrn, xxx b
    ) with no data
    in einem ratsch und einfacher geht.

    mfg

    Dieter Bender

    der keine Ratespiele mag
    Zitat Zitat von muadeep
    bekomme jetzt folgenden Fehler:

    PHP-Code:
    Satz    *...+... ...+... ...+... ...+... ...+... ...+... ...+... ...+... 8   FLGNRLetzte Änderung
          1 insert into jrnanz
    /SOURCES1                                                                              
          2    SELECT 1 
    ,'     A            ' concat WHFLDI concat '   ' concat                                  
          3           
    case when whfldd=0 then substr(digits(whfldb) , 3)                                         
          
    4                else ' 'concat digits(whflddend                                                         
          5           concat whfldt concat                                                                           
          6           
    case when whfldp=0 then '  '                                                                   
          
    7                else substr(digits(WHFLDp) , 2end                                                   
          8           concat                                                                                         
          9           
    Case When Length(Trim(Left(WHFTXT28) <> 0                                                    
         10                Then 
    '       TEXT(' concat                                                                
         11                     
    '''' concat trim(left(WHFTXT 28)) concat ''''                                      
         
    12                     concat ')' end                                                                       
         13      from jrnanz
    /fields                                                                                  
                                   
    * * * * *  E N D E  D E R  Q U E L L E * * * * *                                  
    5722SS1 V5R3M0 040528            SQL-Anweisungen ausführen         SQL                                01.09.06 09
    Satz    
    *...+... ...+... ...+... ...+... ...+... ...+... ...+... ...+... 8   FLGNRLetzte Änderung
    MSG ID  WTK  SATZ  TEXT                                                                                          
    SQL0104  30       9  Position 50 Token 
    <> ungültigGültige Token: ).
                        
    Nachrichtenzusammenfassung             
      Gesamt    Info   Warnung      Fehler  Wertigk
    Beendigung
          1        0         0          0        1         0   
    Fehler der Wertigkeitsstufe 30 in Quelle gefunden

    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. Problem mit Java-Methoden Aufruf aus ILE RPG?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 10-01-07, 10:58
  2. Problem mit Objektberechtigung bei RUNSQLSTM
    By rebe in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 14-12-06, 12:57
  3. Problem mit Steuerzeichen in Datenbank?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 11
    Letzter Beitrag: 26-10-06, 10:07
  4. Authorization Problem nach ändern der Primary Group
    By ChrisX in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 11-10-06, 15:31
  5. Merkwürdiges Problem in VRPG
    By Flappes in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 06-10-06, 08:39

Berechtigungen

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