[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2006
    Beiträge
    16

    SQL UPDATE mit Hostvariablen (Wie geht das?)

    Hallo,

    vielleicht kann mir jemand von euch weiterhelfen.
    Ich hätte eigentlich vor, mir in einem String (siehe unten) das Update-Statement zusammen zu stellen, da sich die WHERE-Bedingung ändern kann. Aber aufgrund der im String enthaltenen Hostvariablen scheint das Ganze nicht zu funktionieren.
    Wie kann ich das Update-Statement ausführen?

    exec sql execute immediate :sqlstmt; funktioniert nicht.

    SQLSTMT = 'UPDATE Datei set Wert1 = :Hostvar1, Wert2 = :Hostvar2 where ....';


    Danke für eure
    Hilfe!

    Joe

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

    Du musst die Hostvariablen im String einbinden (alphanumerische Variablen müssen in Hochkomata gesetzt werden):

    PHP-Code:
    /Free
        MySQLStm 
    'Update MyTable 
                       Set MyFld1 = '   
    HostVar1 ' +
                           MyFld2 = ''' 
    HostVar2 ''' +
                       Where ... '
    ;
         
        
    Exec SQL  Execute Immediate MySQLStm;
     /
    End-Free 
    Birgitta
    Birgitta Hauser

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

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Nun ja, effektiver wenn nicht dynamisch wäre eigentlich:

    c/exec sql
    c+ UPDATE Datei
    c+ set Wert1 = :Hostvar1, Wert2 = :Hostvar2
    c+ where key = :mykey
    c/end-exec
    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
    Sep 2006
    Beiträge
    16
    Hallo,

    ich werde vorerst die von B.Hauser beschriebene Variante implementieren, allerdings würde mir die direkte Nutzung der Hostvariablen auch besser gefallen.

    Kann man dies über das Einbinden der SQLDA ev. lösen?
    Wo gibt es dazu gut beschriebene Beispiele?

    Danke!

    Joe

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Hallo,

    auch das geht, aber meist geht das durchaus ohne, wie sieht denn deine where Klausel aus?

    mfg

    Dieter Bender

    Zitat Zitat von CrazyJoe Beitrag anzeigen
    Hallo,

    ich werde vorerst die von B.Hauser beschriebene Variante implementieren, allerdings würde mir die direkte Nutzung der Hostvariablen auch besser gefallen.

    Kann man dies über das Einbinden der SQLDA ev. lösen?
    Wo gibt es dazu gut beschriebene Beispiele?

    Danke!

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

  6. #6
    Registriert seit
    Sep 2006
    Beiträge
    16
    Hallo,

    nachfolgende SR erzeugt mir jetzt das UPDATE-Statement mit der Where-Klausel.

    MfG,

    Joe

    PHP-Code:
           begsr crt_updstmt;

              
    // --- SQL-statement löschen -----------------------------------------------------------
              
    reset sqlstmt;
              
    // Update-Statement übernehmen
              
    sqlstmt 'UPDATE Datei set Wert1 = ' + %char(Hostvar1) + ', ' +
                        
    'Wert2 = ' + %char(Hostvar2) + ', Wert3 = ' c_HC +  
                        
    Hostvar3 c_HC ', ' 'Wert4 = ' + %char(Hostvar4);

              
    §where = *off;

              
    // Where-Bedingung an Update  anfügen
              
    if where1 <> ' ' and
                 
    where1 <> '***';
                if 
    §where = *off;
                  
    sqlstmt = %trim(sqlstmt) + ' ' c_where +
                            
    ' where1 = ' c_HC Hostvar5 c_HC;
                  
    §where = *on;
                else;
                  
    sqlstmt = %trim(sqlstmt) + ' ' c_and +
                              
    ' where1 = ' c_HC Hostvar5 c_HC;
                endif;
              endif;

              if 
    where2 <> 0;
                if 
    §where = *off;
                  
    sqlstmt = %trim(sqlstmt) + ' ' c_where +
                            
    ' where2 = ' c_HC + %char(Hostvar6) + c_HC;
                  
    §where = *on;
                else;
                  
    sqlstmt = %trim(sqlstmt) + ' ' c_and +
                              
    ' where2 = ' c_HC + %char(Hostvar6) + c_HC;
                endif;
              endif;

              
    //usw,...
          
           
    endsr

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Hallo,

    wenn das bei dem usw. strukturell genauso weiter geht, dann lässt sich das mit:

    update mytable
    set myColumn = :myColumn
    where
    column1 between :low1 and :high1
    and column2 between :low2 and :high2

    sogar als statisches SQL lösen.
    wenn dann eine Bedingung für columnX ausfallen soll, dann besetzt man lowX mit loval und highX mit highval

    mfg

    Dieter Bender

    udate
    Zitat Zitat von CrazyJoe Beitrag anzeigen
    Hallo,

    nachfolgende SR erzeugt mir jetzt das UPDATE-Statement mit der Where-Klausel.

    MfG,

    Joe

    PHP-Code:
           begsr crt_updstmt;

              
    // --- SQL-statement löschen -----------------------------------------------------------
              
    reset sqlstmt;
              
    // Update-Statement übernehmen
              
    sqlstmt 'UPDATE Datei set Wert1 = ' + %char(Hostvar1) + ', ' +
                        
    'Wert2 = ' + %char(Hostvar2) + ', Wert3 = ' c_HC +  
                        
    Hostvar3 c_HC ', ' 'Wert4 = ' + %char(Hostvar4);

              
    §where = *off;

              
    // Where-Bedingung an Update  anfügen
              
    if where1 <> ' ' and
                 
    where1 <> '***';
                if 
    §where = *off;
                  
    sqlstmt = %trim(sqlstmt) + ' ' c_where +
                            
    ' where1 = ' c_HC Hostvar5 c_HC;
                  
    §where = *on;
                else;
                  
    sqlstmt = %trim(sqlstmt) + ' ' c_and +
                              
    ' where1 = ' c_HC Hostvar5 c_HC;
                endif;
              endif;

              if 
    where2 <> 0;
                if 
    §where = *off;
                  
    sqlstmt = %trim(sqlstmt) + ' ' c_where +
                            
    ' where2 = ' c_HC + %char(Hostvar6) + c_HC;
                  
    §where = *on;
                else;
                  
    sqlstmt = %trim(sqlstmt) + ' ' c_and +
                              
    ' where2 = ' c_HC + %char(Hostvar6) + c_HC;
                endif;
              endif;

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

  8. #8
    Registriert seit
    Sep 2006
    Beiträge
    16
    Hallo,

    ich werde den von Hr. Bender angesprochenen Lösungsansatz auch ausprobieren.

    Danke für eure Hilfe!

    Joe

Similar Threads

  1. SQL Update aus zwei Dateien mit 3 Schlüsselfeldern
    By mk in forum NEWSboard Programmierung
    Antworten: 13
    Letzter Beitrag: 13-07-12, 08:53
  2. update per sql
    By steven_r in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 25-09-06, 08:22
  3. SQL Update 2 Dateien
    By moskito in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 30-08-06, 17:30
  4. Update Syntax SQL
    By wuwu in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 18-07-06, 15:31
  5. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43

Berechtigungen

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