[NEWSboard IBMi Forum]

Thema: SQLRPGLE

  1. #1
    Registriert seit
    May 2002
    Beiträge
    1.121

    SQLRPGLE

    Hallo Gemeinde!

    Ich hätte da mal wieder eine Frage zu einem SQLRPGLE-Programm.

    Im Programm habe ich im Moment mehrmals ein SQL, welches bis auf die letzte WHERE-Bedingung identisch ist.

    Exec SQL
    Select Wert1, Wert2, Wert3,.... into :XDatenSQL
    from Myfile where Feld1 = :XDAT and Feld2 = :WASauchIMMER
    and hier dann der abweichende Teil

    Diese Anweisung kommt dann öfters.
    Jetzt Wollte ich für die Lesbarkeit des Programms das SQL als String definieren
    Anweisung_Alle = 'Select ...'
    und dann
    Anweisung_SQL = %Trim(Anweisung_ALLE) + abweichender Teil
    Danach dann ein
    Exec SQL
    Execute Immediate :Anweisung_SQL;

    Nur so funktioniert es wohl nicht, wie ich es mir gedacht habe.
    Wie müsste es richtig aussehen ??

    Viele Grüße
    Ronald

  2. #2
    Registriert seit
    Apr 2005
    Beiträge
    385
    Code:
     SQLSTM 3064A VARYING
    SQLSTM = 'SELECT FLD1, FLD2, ... FROM MyFILE
    SQLSTM = SQLSTM + 'WHERE BED1 AND BED2..'   
    
    EXEC SQL PREPARE STMT1 FROM :SQLSTM
    EXEC SQL DECLARE C1 CURSOR FOR STMT1
    EXEC SQL OPEN C1 
    EXEC SQL FETCH INTO :VAR
    EXEC SQL CLOSE C1
    So funktioniert es bei mir V6R1 & V7R1 ...

  3. #3
    Registriert seit
    Nov 2003
    Beiträge
    2.306
    Läufst du da nicht in die Falle einer SQL-Injection?

  4. #4
    Registriert seit
    May 2002
    Beiträge
    1.121
    OKay,

    ich dachte ich kann mir den PREPARE, DECLARE,... Sparen

    Dann werde ich das mal so machen

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Zitat Zitat von Pikachu Beitrag anzeigen
    Läufst du da nicht in die Falle einer SQL-Injection?
    ... ein vermeintlich schlauer Spruch, unpassend angebracht!!!
    - solange der Rest des Statements nicht zugänglich ist, passiert da garnichts!!!
    - die üblen Beispiele, die gerne für Injection angebracht werden, funktionieren mit DB2/400 nicht, da der prepare keine 2 Statements durchlässt!!!

    D*B

    PS: gegen Injection ist ein einfaches Kraut gewachsen, filtern des Eingabestrings.
    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
    Jan 2012
    Beiträge
    1.120
    Mit select ... into :xDatenSQL ... nutzt du ja eine Host-Variable (xDatenSQL) innerhalb deiner SQL Anweisung. Das geht nur, wenn du eine "echte" SQL-Anweisung hast (also statisches SQL). Wenn du dynamisches SQL machst, hast du ja erstmal keine echte SQL-Anweisung mehr, sondern einen String, der später interpretiert wird. Da kann er die Hostvariablen dann nicht mehr erkennen. Deshalb ist der Cursor notwendig.

Similar Threads

  1. SQLRPGLE Get und Set Prozeduren
    By iseries_user in forum NEWSboard Programmierung
    Antworten: 14
    Letzter Beitrag: 11-05-16, 10:13
  2. Fully Free und SQLRPGLE
    By dschroeder in forum IBM i Hauptforum
    Antworten: 10
    Letzter Beitrag: 18-12-15, 12:01
  3. SQLRPGLE und Printerfile
    By Toschie in forum IBM i Hauptforum
    Antworten: 12
    Letzter Beitrag: 02-02-15, 14:28
  4. SQLRPGLE: Abfrage als Tabelle
    By ExAzubi in forum NEWSboard Programmierung
    Antworten: 10
    Letzter Beitrag: 10-11-14, 10:12
  5. Compilierung SQLRPGLE
    By B.Hauser in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 01-10-01, 17:31

Berechtigungen

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