[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Nov 2005
    Beiträge
    4

    SQLRPGLE - Select ... where xxfeld in( ??)

    Hallo, ich habe leider hier nichts gefunden:
    Mein Problem ist eine Abfrage auf eine programminterne Tabelle:

    D ZON# S 3 0 DIM(999)

    DECLARE SQLDaten2 CURSOR FOR
    SELECT DISTINCT Feld1, Feld2, Feld3...
    FROM Datei1
    WHERE Feld1=:Var1 and Feld2=:Var2 and
    Feld3 IN (:ZON) ??????

    usw..

    Ich habe in ZON# 999 mögliche gültige Feldwerte.
    Wie kann ich Feld3 auf diese mehreren Feldwerte abfragen?


    Geht das überhaupt?

    Vielen Dank Martin

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Du musst je möglichen Feldwert eine Hostvariable definieren:

    where myfield in (: F1, : F2, : F3, ...)

    Variablen, die du nicht benötigst solltest du dann mit ggf. *LOVAL oder *HIVAL initialisieren.

    Wenn du allerdings eine Liste mit so vielen Variablen abgleichen willst, wäre POSSTR ggf. besser. Dafür benötigst du eine Hilfsvariable, die die Liste der Werte beinhaltet mit einem Trennzeichen zusammengefasst:

    MyCharList = "1;2;3;...;999;"

    where posstr(char(MyField) concat ';', : MyCharList) > 0
    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
    Aug 2003
    Beiträge
    1.508
    Du könntest dir auch mit dynamischen SQL deinen String zusammenbasteln. Und diesen dann als Cursor einlesen.

  4. #4
    Registriert seit
    Nov 2005
    Beiträge
    4
    Danke für die Antworten,
    ich habe mich jetzt 5 Stunden gespielt im RPG als auch im SQL, ich brings nicht hin.

    Werde es daher wieder klassisch programmieren.

    Trotzdem vielen Dank.

    C MOVEL(P) '001;002;003;'M1OUNR 3100
    C MOVEL(P) '001;002;003;'M1ZONE 3100

    habe es auch probiert mit

    C MOVEL(P) '1;2;3;' M1OUNR 3100
    C MOVEL(P) '1;2;3;' M1ZONE 3100

    0404.00 C/EXEC SQL
    0405.00 C+ DECLARE SQLDaten2 CURSOR FOR
    0406.00 C+ SELECT DISTINCT OFMDNR, OFHANR, OFOFNR, OFLEIA, OFDTBI, OFSAAK
    0407.00 C+ FROM OFAL0302
    0408.00 C+ WHERE OFMDNR=:OSMDNR and
    0409.00 C+ OFHANR=:OSHANR and
    0410.00 C+ OFOFNR=:OSOFNR and
    0411.00 C+ POSSTR(CHAR(OFOUNR) CONCAT ';', : M1OUNR) > 0 and
    0412.00 C+ POSSTR(CHAR(OFZONE) CONCAT ';', : M1ZONE) > 0 and
    0413.00 C+ OFDTBI=:M0DTBI and
    0414.00 C+ OFSAAK=:M0SAAK
    0415.00 C+ GROUP BY OFMDNR, OFHANR, OFOFNR, OFLEIA, OFDTBI, OFSAAK
    0416.00 C+ ORDER BY OFMDNR, OFHANR, OFOFNR, OFLEIA, OFDTBI, OFSAAK
    0417.00 C/END-EXEC

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Entschuldigung, war mein Fehler!
    Die Argumente für POSSTR waren vertauscht:

    posstr(ZuDurchsuchendeZeichenkette, ZuSuchendeZeichenkette)

    Also

    POSSTR(: M1OUNR, CHAR(OFOUNR) CONCAT ';') > 0

    Wichtig ist, dass CHAR ohne Vornullen aufbereitet, daher in der Suchliste auch ohne Vornullen, ansonsten ist DIGITS(MyNum) zu verwenden.

    Das ";" ist deshalb nötig, da eine einzelne Ziffer ja auch in einer längeren Zahl vorkommen kann und nur so Eindeutigkeit gewährleistet ist.
    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

  6. #6
    Registriert seit
    Nov 2005
    Beiträge
    4
    ohhhhhhhhhhh


    habs vertauscht und siehe da ...

    es funktioniert .. herzlichen Dank

    C/EXEC SQL
    C+ DECLARE SQLDaten2 CURSOR FOR
    C+ SELECT DISTINCT OFMDNR, OFHANR, OFOFNR, OFLEIA
    C+ FROM OFAD03
    C+ WHERE OFMDNR=:OSMDNR and
    C+ OFHANR=:OSHANR and
    C+ OFOFNR=:OSOFNR and
    C+ POSSTR(:M1OUNR, CHAR(DIGITS(OFOUNR)) CONCAT ';') > 0 and
    C+ POSSTR(:M1ZONE, CHAR(DIGITS(OFZONE)) CONCAT ';') > 0 and
    C+ OFDTBI=0 and
    C+ OFSAAK='J'
    C+ GROUP BY OFMDNR, OFHANR, OFOFNR, OFLEIA
    C+ ORDER BY OFMDNR, OFHANR, OFOFNR, OFLEIA


    Vielen vielen Dank

Similar Threads

  1. CREATE FUNCTION mit select im Bauch ?
    By cheffe1008 in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 21-09-06, 16:05
  2. select auf sql-table
    By heini in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 04-08-06, 13:51
  3. sql select mit zusätzl. Feldern
    By rr2001 in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 07-07-06, 09:56
  4. Cobol-Programm mit Embedded SQL (SELECT CASE)
    By klausgkv in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 08-06-06, 13:47
  5. select 10 größte Werte je Ordnungsbegriff
    By holly in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 16-05-06, 12:45

Berechtigungen

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