[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Mar 2002
    Beiträge
    5.376
    ... da sollte es hier im Forum schon Beispiele geben - und wenn man sich die Mühe des suchens ersparen will, gibt es immer noch das FM...

    D*B

    Zitat Zitat von Souljumper Beitrag anzeigen
    wie geht dynamisches sql unter rpg?

    wie müsste da so ein declare mit aufruf aussehen.

    dynamisches sql kenn ich bisher nur von oracle, habs aber unter db2 und rpg nie verwendet.

    ein kurzes syntaxbeispiel oder so wäre fein?
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

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

    mit welchem Release arbeitest DU?
    Ich habe gerade unter V5R4 ein Mini-Programm mit embedded SQL Cursor und Substring mit Host-Variablen in den Where-Bedinungen erstellt. Die Ausführung läuft ebenfalls problemlos.


    PHP-Code:
    D BegPos          S              5I 0            
    D Len             S              5I 0            
    D Text            S             50A        
     
    /Free      
        BegPos 
    3;                                                          
        
    Len    5;                                                          
                                                                             
        
    Exec SQL  Declare CsrC01 Cursor For    
              
    Select Name1F From MYTABLE
                 Where Substr
    (Name, :BegPos, :Len) = 'ABCDE'
                                                                             
        
    Exec SQL  Open CsrC01;                                               
        
    Dsply SQLCOD;                                                        
        
    Exec SQL  Fetch Next From CsrC01 into :Text;                  
        
    Dsply SQLCOD;                                             
        
    Dsply Text;           
        
    Exec SQL  Close CsrC01;  
        *
    INLR = *ON;                                            
     /
    End-Free 
    ... übrigens in SQL heißt die scalare Funktion SUBSTR (und nicht SUBST, das ist RPG!)

    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
    Oct 2004
    Beiträge
    53
    hab hier v5r1

    mit free rpg arbeiten wir gar nicht, nur rpg 4.

    muss ich beim dynamischen sql jedesmal den prepare und declare ausführen bevor ich einen open mache?

    Mein programm wird nämlich von einem asy-job aufgerufen und bin mir jetzt nicht sicher warum ich andauernd die fehlercodes 514 kriege.

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.932
    Das funktioniert mit klassischem RPG genauso.
    Es funktioniert sogar mit RPGIII.

    Hast Du mal versucht SUBSTR statt SUBST zu scheiben.

    Beim dynamischen SQL wird der SQL-Befehl zur Laufzeit zusammengepfriemelt und dann in einen ausführbaren SQL-Befehl (geschieht beim PREPARE) konvertiert.

    Deshalb: Prepare, Declare, Open ist immer erforderlich. Es sei den das gleiche SQL statement wird mehrfach ausgeführt, dann genügt ein OPEN.

    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

  5. #5
    Registriert seit
    Oct 2004
    Beiträge
    53
    hm

    hab mr jetzt mal ein minimal beispiel gebastelt, das funktioniert nur wenn ich in der reihenfolge

    declare, prepare, open vorgehe

    ich finde ein beispiel für prepare, declare, open auch auf den ibm seiten, aber die funktionieren bei mir nicht....

    sqlcode 440 oder 514 sind da die regelmäßigen antworten.

  6. #6
    Registriert seit
    Oct 2004
    Beiträge
    53
    das problem scheint mein substringbefehl zu sein.

    sobald ich in meinem vorbereiteten statement string ein

    substr(feld1, 1, ?) = ?

    einbaue, schlägt der prepare fehl.

    ist die syntax bei substr anders?

  7. #7
    Registriert seit
    Oct 2004
    Beiträge
    53
    er kann es nicht, aus welchen gründen auch immer.

    stmnt = 'substr(feld1, 1, ' + %trim(len) + ') = ?'

    funktioniert -.-*

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.716
    Das "?" als Parameter funktioniert ausschließlich bei dynamischen SQL mit USING SQLDA.

    Bei eingebettetem SQL benötigst du immer Hostvariablen.

    Aber beachte doch bitte Birgittas Hinweis auf deinen Schreibfehler.
    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

  9. #9
    Registriert seit
    Mar 2002
    Beiträge
    5.376
    ... man kann durchaus ein SQL Statement mit ? als Parametermarker preparen und dann mit open using verarbeiten...

    D*B

    Zitat Zitat von Fuerchau Beitrag anzeigen
    Das "?" als Parameter funktioniert ausschließlich bei dynamischen SQL mit USING SQLDA.

    Bei eingebettetem SQL benötigst du immer Hostvariablen.

    Aber beachte doch bitte Birgittas Hinweis auf deinen Schreibfehler.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.716
    @Dieter
    War das nicht eindeutig: "mit USING SQLDA" ?
    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

  11. #11
    Registriert seit
    Mar 2002
    Beiträge
    5.376
    ... da geht auch using :myVar1, :myVar2 ..., wobei dann die Liste der HostVars in die Parametermarker einsortiert wird (geht beim execute genauso, mit den üblichen Limitierungen, wie keine Feldnamen etc)

    D*B

    Zitat Zitat von Fuerchau Beitrag anzeigen
    @Dieter
    War das nicht eindeutig: "mit USING SQLDA" ?
    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. ILE RPG / SQL Füllen einer Feldgruppe
    By homue in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 18-07-07, 16:47
  2. embedded SQL in RPG
    By muadeep in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 03-08-06, 13:25
  3. RPG mit Embedded SQL, JOIN ..
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 18-06-06, 12:14
  4. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43
  5. embedded SQL in ILE RPG, UPDATE
    By Zupfl50 in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 06-10-04, 21:04

Berechtigungen

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