[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Nov 2015
    Beiträge
    80

    Variable innerhalb von EXEC SQL nutzen

    Hallo zusammen,

    ich rufe über ein CL ein SQLRPG auf. Dabei übergebe ich Variablen. Diese möchte ich gerne innerhalb von EXECSQL nutzen. Leider kommt die Meldung "Spalte oder Globale Variable nicht gefunden"

    Nun zu meiner Frage.. muss ich Variablen zusätzlich im EXEC SQL deklarieren?

    Danke im voraus.
    _MG_

  2. #2
    Registriert seit
    May 2002
    Beiträge
    1.121
    Die Variabeln fangen mit einen Doppelpunkt an.
    Im RPG ->>> MeinFeld
    im SQL-Teil ->>> :MeinFeld

    Gruß
    Ronald

  3. #3
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Für Variablen benötigst du den Doppelpunkt ':'.
    Du kannst die Variablen aber nur beschränkt einsetzten, z.B. als Werte:
    Code:
    Exec Sql Insert Into Tab1 values ('Wert1', 4711, :myHostVariable);
    Wenn du die Variable z.B. für den Tabellennamen verwenden willst, benötigst du dynamisches SQL.

    lg Andreas

  4. #4
    Registriert seit
    Nov 2015
    Beiträge
    80
    Danke schonmal.. das hatte ich eigentlich beachtet

    Beispielcode:
    EXEC SQL
    DECLARE C1 SCROLL CURSOR FOR
    select Feld,Feld2,Feld3,Feld4,Feld5from Bib/Datei
    where Datei.Feld BETWEEN :SQLVON AND :SQLBIS AND
    Feld1='N' AND
    Feld2= :SQLFI AND
    Feld3= :SQLFA AND
    Feld4='00'
    OR ...


    Ist das in der Art und Weise möglich?

  5. #5
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Wie sieht die Fehlermeldung im Detail aus?
    Welche Variable konnte er nicht finden?

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Seit V7 werden Tippfehler leider nicht mehr vom Compiler sondern erst zur Laufzeit bestraft.
    Der Compiler hält zunächst mal alle nicht gefundenen Variablen oder Felder des SQL's für später verfügbare globale Variablen was SQL dann zur Laufzeit eben bei Nichtvorhandensein bestraft.
    Häufig ist das dann in der Quelle nur ein fehlender Doppelpunkt vor einer Hostvariable, was man leider nur zu leicht überliest.
    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

  7. #7
    Registriert seit
    May 2002
    Beiträge
    1.121
    Was mir immer noch angeraten worden ist,
    eigene Variabeln sollten nicht mit SQL beginnen.
    Der Compiler erstellt bei der Umsetzung des SQLs selber jede Menge Variabeln die mit SQL beginnen.
    Nicht das es da mal zu Konflikten kommt, weil man zufällig den gleichen Namen verwendet.
    Bzw. bei irgend einem Relaiswechsel die IBM neue Variabeln einführt, die sich dann mit den eigenen beißen.

    Gruß
    Ronald

  8. #8
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Werden die Variablen als Parameter übergeben, hat der SQL Precompiler bisweilen Probleme diese zu finden und zuzuordenen.

    Versuche mal zusätzliche Variablen zu generieren, die Du mit den im SQL verwendeten Parameter-Werten versorgst und anschließend als Host-Variablen im SQL-Statement einsetzt.

    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

  9. #9
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... oder das prüft, was bisher nicht geprüft wurde - hatten wir alles schon...

    D*B
    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
    Nov 2015
    Beiträge
    80
    Hallo zusammen und Danke für die vielen Antworten,

    der fehler lag ganz unspektakulär bei einem falsch übergeben Parameter. Ich finde die Fehlermeldung der as400 an dieser Stelle echt kompliziert bzw. etwas ungenau..
    Trotzdem nochmal Danke. In den Beiträgen war sehr viel Wissenswertes.

    grüße und ein schönes Wochenende
    MG

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Die Meldung "Spalte oder Globale Variable nicht gefunden" ist da schon sehr eindeutig.
    D.h., dass entweder der Name der Spalte in einer Tabelle nicht da ist oder eben die ab V7 mögliche globale Variable.
    Damit ist dann eben keine Hostvariable gemeint, die grundsätzlich mit einen Doppelpunkt beginnen muss. Und somit ergibt sich dann der Tippfehler, der vom Compiler nicht mehr erkannt werden kann.
    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

  12. #12
    Registriert seit
    Nov 2015
    Beiträge
    80
    Ich fand es nur verwirrend das er bei der Fehlermeldung auch auf den SQL Cursor hinweist, gleichzeitig aber den Fehler in der Reihe bemängelt in der die Variable initialisiert wird. Im Nachhinein erscheint es natürlich logisch, wahrscheinlich hat mir hier einfach Erfahrung gefehlt um das richtig zu interpretieren.

    MG

Similar Threads

  1. RDI - /End-Exec im festen Format
    By homue in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 25-07-16, 15:27
  2. SQL mit enthaltenen Parametern innerhalb von CL's
    By _MG_ in forum NEWSboard Programmierung
    Antworten: 14
    Letzter Beitrag: 12-12-15, 13:07
  3. Qshell Umleitung find mit -exec in eine PF
    By hxiak in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 15-09-14, 19:15
  4. Excel-Dateien innerhalb von OS/400 erstellen
    By Klaus in forum NEWSboard Server Software
    Antworten: 0
    Letzter Beitrag: 20-04-02, 19:37
  5. Zur Zeit gültige IBM-Promos nutzen !
    By AS-Trade in forum NEWSboard Server & Hardware Markt
    Antworten: 0
    Letzter Beitrag: 08-09-01, 13:29

Berechtigungen

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