[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Oct 2005
    Beiträge
    42

    Hilfe bei embedded SQL

    Hallo,

    ich mache gerade meine ersten Schritte mit embedded SQL.
    Bis jetzt läuft es ganz gut, nur leider kann ich mir 2 Fragen nicht beantworten. Unzwar

    Alpha Felder müssen ja mit Anführungszeichen in der Where Bestimmung angeben werden, also z.B. Feld 1 = 'HALLO'. In ILE RPG kann man sich dazu ein Konstante Basteln. Meine Programme sind jedoch momentan noch in RPG III. Deshalb meine Frage wie definieren ich Konstanten in RPG III oder wie händelt man das mit den Anfürungszeichen??

    Die andere Frage ist das man Felder ja maximal mit 255 Zeichen difinieren kann. Leider sind meine SQL Statments größer wie händel ich dies?
    Kann man beim PREPARE Befehl einfach, 2 Felder angeben und diese werden dann automatisch Verknüpft?

    Danke für eure Antworten

    Gruß

    Marcel

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.300
    Wenn du gleich mit dynamischem SQL loslegst hast du auch entsprechende Schwierigkeiten.
    Fang doch erst mal mit statischen SQL's an, also nicht zusammengebauten.
    Dann gibt's auch weniger Anfangsprobleme mit den Variablen.
    Ein SQL kann bis 32k lang sein und wird weitestgehend vom SEU unterstützt.
    also:

    c/exec sql
    c+ declare cursor mycursor for
    c+ select f1, f2, f3 ...
    c+ from myfile
    c+ where k1= : R1 and K2= : K2
    c/end-exec

    Der große Vorteil:
    Um Hochkommata brauchst du dich fast gar nicht zu kümmern.
    Du definierst einfach deine RPG-Variablen und kannst diese als Quelle und Ziel im SQL mit einem ":" angeben.

    c/exec sql
    c+ open mycursor
    c/end-exec

    c/exec sql
    c+ fetch mycursor into : v1, : V2, ...
    c/end-exec

    c/exec sql
    c+ close mycursor
    c/end-exec

    Bei dynamischem SQL musst du bei Zeichenfeldern darauf achten, dass enthaltene Hochkommata ja verdoppelt werden müssen, sonst gibts Syntaxfehler !
    Dynamisches SQL ist auch mit RPGLE besser durchzuführen (Variablen bis 32K).
    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

  3. #3
    Registriert seit
    Oct 2005
    Beiträge
    42
    Hallo,

    Danke für die schnelle Antwort, leider muss ich direkt mit dynamischen SQL anfangen weil es mein Abschluss Projekt ist.
    Ist es also bei RPG III nicht möglich größere Statments als 255 Zeichen zu generieren?

    Und wie händelt man es nun mit den Anführungszeichen??

    Vielen Dank für eure Antworten


    Gruß

    Marcel

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.300
    Indirekt kann man Variablen bis 9999 Zeichen definieren.

    E MDS 9999 1
    IMYDS DS 9999
    I 1 9999 MDS

    Die DS MYDS ist dann als Variable mit 9999 Zeichen definiert. Das Array kann entfallen, der Compiler gibt dann nur eine 00-Warnung, dass die DS keine Felder enthält.

    Das Hochkommaproblem musst du am besten in einer Sub-Routine lösen.
    Zeichenketten müssen mit Hochkomma anfangen und enden:

    cat '''':1 MYDS
    cat chrfld:0 myds
    cat '''':0 myds

    Enthält chrfld ein Hochkomma (über '''' scan chrfld prüfbar) muss dieses verdoppelt werden.
    Numerische Felder sind ohne Hochkomma mit Dezimalpunkt oder Komma aufzubereiten.
    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

  5. #5
    Registriert seit
    Oct 2005
    Beiträge
    42
    Guten Morgen,

    hab es gerade mit den Anführungszeichen Versucht, funktioniert ohne Probleme. Vielen Dank.

    Das mit dem 9999 stelligen Feld klappt leider nicht, in der DS wird das Feld auch richtig definiert und ich kann mein SQL Statment zusammenfügen.
    Aber leider mag der PREPARE Befehl diese Art von Variable nicht. Gibt es zufällig noch eine andere Lösung.

    Schonmal Vielen Dank für die Antworten, ihr helft mir sehr weiter

    Gruß

    Marcel

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.882
    Hallo,

    wenn Du unbedingt RPGIII mit dynamischem SQL, dann hast Du keine Chance! 255-Zeichen für einen SQL-Befehl sind das Limit!

    Wir haben uns vor Jahren an diesen Restriktionen die Finger gebrochen und mussten dann mit ein paar Tricks statisches SQL verwenden. Die meisten Anforderungen können mit statischem SQL realisiert werden. Ausserdem ist die Performance mit statischem SQL besser, da die Syntax-Prüfung bereits zum Compile-Zeitpunkt und nicht erst zur Laufzeit erfolgt. Ausserdem werden die Zugriffs-Pläne beim statischen SQL im Programm-Objekt gespeichert und können bei folgenden Aufrufen zur Optimierung herangezogen werden.

    Was spricht dagegen RPGIV mit embedded SQL zu verwenden?
    Eigentlich ist RPGIII seit 10 Jahren tot (bzw. wird seit 10 Jahren nicht mehr weiterentwickelt) und damit m.E. auch für eine Projekt-Arbeit nicht das Gelbe vom Ei!

    Bei RPGIV können die SQL-Befehle bis zu 35767 Byte lang sein.

    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

  7. #7
    Registriert seit
    Oct 2005
    Beiträge
    42
    Hallo,

    da muss ich mich wohl geschlagen geben.
    Habe mein jetztiges Programm mit CVTRPGSRC konvertiert.
    Ich wollte RPG III verwenden, da momentan noch alle Programme bei uns in RPG III entwickelt werden.
    Bei der Abschlussprüfung macht das keinen Unterschied, bin ja schon froh wenn die Prüfer die AS/400 und RPG kennen. Es lebe die IHK.

    Was mich aber auch an ILE stört ist das man den ISDB nicht mehr benutzen kann und mit dem STRDBG werde ich nicht so richtig warm. Aber da muss ich jetzt wohl durch.

    Danke für eure Hilfe

    Gruß

    Marcel

Similar Threads

  1. Embedded SQL in VARPG
    By Squall in forum NEWSboard Programmierung
    Antworten: 23
    Letzter Beitrag: 18-10-06, 12:01
  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. Character verbinden in Embedded SQL
    By e_sichert in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 03-05-06, 10:47

Berechtigungen

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