[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    May 2004
    Beiträge
    184

    Anzeigervariable im SQLRPGLE

    Hallo Kollegen,
    ich habe ein Problem mit meinem SQLRPGLE.

    Benutze folgende DS
    D BANK00 DS
    D BANKKT 1 15
    D BLZ2 16 23
    D SKONTO 24 25P 2 INZ(0,00)
    D SKTB 26 27P 2 INZ(0,00)
    D VORPRO 28 30P 3 inz(0,000)
    D VORFUE 31 31
    D GUELT3 32 41


    wenn ich jetzt mit SQL die Datenstruktur fülle, bekomme ich immer ein SQL-Fehler 305.
    Ich lese eine Datei per Sql aus, über select übertrage ich mehrere Felder mit INTO in die DS BANK00 das Feld(BLZ) in meiner Datei ist NULL. Beim Programmlauf bekomme ich Fehler 305 (Anzeigervariable benutzen), aber wir baue ich soetwas in meine DS ein ?
    Vielleicht kann mir einer einen Tip geben !

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    In einem solchen Fall brauchst du ein Anzeiger-Array:

    d AnzArray 5I 0 dim(nn)

    wobei nn midestens der Anzahl der Felder der Struktur sein muss.

    dann "fetch cursor into :bank00 :AnzArray" oder "select ... into :Bank00 :AnzArray ..."

    AnzArray(1) ist der Anzeiger für das 1. Feld
    AnzArray(2) ist der Anzeiger für das 2. Feld
    usw.

    Inhalt:
    0 = OK
    -1 = NULL
    -2 = Datenverlust (abgeschnitten)

    Ansonsten auch jedes Feld einzeln mit Anzeiger aufführen (ist sowieso sicherer)

    Select/Fetch ... into :feld1 :anz1, :feld2 :anz2 ...
    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
    May 2004
    Beiträge
    184
    Hallo Fuerchau,
    habe alles so gemacht wie beschrieben.
    Beim kompilieren bekomme ich aber folgende Fehlermeldung :
    Position 53 Variable ANZARRAY nicht definiert oder nicht
    verwendbar.

    Was mache ich falsch ?

  4. #4
    Registriert seit
    May 2004
    Beiträge
    184
    Hallo Fuerchau,
    habe leider zwischen der Hostvariablen und der Anzeigervariablen ein Komma gesetzt. War mein Fehler !!!!!!!!!!!!

    Sorry, aber jetzt klappt es dank Deiner Hilfe

    Schöne Grüße

  5. #5
    Registriert seit
    Oct 2003
    Beiträge
    192
    Hi ihr,

    Es geht auch anders.

    Einfach mit

    SELECT IPONUM, VALUE(PROSCD, ' ')
    FROM INVMST LEFT OUTER JOIN POMZPO
    ON IPONUM = PONUMB
    GROUP BY IPONUM, PROSCD


    Mit VALUE und dann den Alternativ Wert (Hier ein Blank) angeben.

    So mach ich das wie man oben Sehen kann bei Left Outer Joins im SQLRPGLE.

    Also vs noch

    Rince

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von Rincewind
    Hi ihr,

    Es geht auch anders.

    Einfach mit

    SELECT IPONUM, VALUE(PROSCD, ' ')
    FROM INVMST LEFT OUTER JOIN POMZPO
    ON IPONUM = PONUMB
    GROUP BY IPONUM, PROSCD


    Mit VALUE und dann den Alternativ Wert (Hier ein Blank) angeben.

    So mach ich das wie man oben Sehen kann bei Left Outer Joins im SQLRPGLE.

    Also vs noch

    Rince
    Eine kleine Anmerkung:
    Die Skalare Funktion COALESCE bietet die gleiche Funktionalität und sollte der Skalaren Funktion VALUE vorgezogen werden, da COALESCE dem Standard SQL 1999 entspricht.

    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
    Feb 2001
    Beiträge
    20.695
    @Rince

    Sicherlich geht das so, aber der nicht vorhandene Inhalt NULL kann so ja nicht abgefragt werden. Benötige ich die Unterscheidung zwischen NULL und Blank/Zero nicht, ist das sicherlich so einfacher.
    Ich kann dann allerdings nicht mehr "Select * " verwenden (vor allem wenn die Struktur aus extern deklariert ist). Ich sollte allerdings so sowieso nicht arbeiten sondern (auch aus Performancegründen) immer alle gewünschten Felder einzeln aufführen.
    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

  8. #8
    Registriert seit
    Jan 2003
    Beiträge
    302
    Zitat Zitat von Fuerchau Beitrag anzeigen
    In einem solchen Fall brauchst du ein Anzeiger-Array:

    d AnzArray 5I 0 dim(nn)

    wobei nn midestens der Anzahl der Felder der Struktur sein muss.

    dann "fetch cursor into :bank00 :AnzArray" oder "select ... into :Bank00 :AnzArray ..."

    AnzArray(1) ist der Anzeiger für das 1. Feld
    AnzArray(2) ist der Anzeiger für das 2. Feld
    usw.

    Inhalt:
    0 = OK
    -1 = NULL
    -2 = Datenverlust (abgeschnitten)

    Ansonsten auch jedes Feld einzeln mit Anzeiger aufführen (ist sowieso sicherer)

    Select/Fetch ... into :feld1 :anz1, :feld2 :anz2 ...


    Hallo,
    kann es sein, daß die o.g. Lösung bei V5R2M0 noch nicht funktioniert ?
    Ich habe den Anzeiger-Array wie folgt definiert:

    D w1indic 5I 0 DIM(26) Anz.Felder von ds_datei

    Und den FETCH habe ich wie folgt definiert:
    Fetch C1 into :ds_datei :w1indic

    Und bekomme nun bei Ausführung des Pgms den SQL-Fehler 326 Zu viele Hostvariablen definiert !

    Danke im Voraus !
    Peet

  9. #9
    Registriert seit
    Mar 2007
    Beiträge
    8
    Zitat Zitat von B.Hauser Beitrag anzeigen
    ... da COALESCE dem Standard SQL 1999 entspricht.

    Birgitta
    Hallo Birgitta!

    Was heißt das jetzt? Ist Value irgendwann nicht mehr gültig? Ich benutze nämlich lieber value, weil es kürzer und einfacher als Coalesce ist.

    Schönen Grüß...

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Value und Coalesce sind identisch, der einzige Untersichied:

    Value -> AS/400
    Coalesce -> ANSI

    Es geht hier nur um Portierbarkeit von SQL's, aber bei ILE/RPG spielt das wohl eher eine untergeordnete Rolle.
    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.365
    ... es sei denn, dass bei der Weiterentwicklung des ANSI Standards von SQL irgendwann mal eine Funktion VALUE mit anderer Bedeutung, oder in anderer Form inkompatibel, in den SQL Standard aufgenommen wird.

    mfg

    Dieter Bender

    Zitat Zitat von Fuerchau Beitrag anzeigen
    Value und Coalesce sind identisch, der einzige Untersichied:

    Value -> AS/400
    Coalesce -> ANSI

    Es geht hier nur um Portierbarkeit von SQL's, aber bei ILE/RPG spielt das wohl eher eine untergeordnete Rolle.
    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. sqlrpgle
    By guru30 in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 22-02-06, 14:53
  2. SQLRPGLE
    By mk in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 17-11-05, 09:48
  3. *zoned bei SQLRPGLE Programm
    By Stefan_Sk in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 12-07-05, 13:04
  4. Suche SQLRPGLE Beispiel-Code
    By WeKaSys in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 15-10-04, 11:19
  5. SQLRPGLE Programme erkennen
    By HELROHA in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 11-10-04, 10:38

Berechtigungen

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