[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Nov 2009
    Beiträge
    208

    mit SQL in ein array lesen

    Hallo Ihr Wissenden,

    ich versuche mit SQL in eine Feldgruppe zu lesen

    Code:
    D wert            DS                  DIM(99) QUALIFIED  
    D we                             7S 0                    
    
    C     *ENTRY        PLIST                          
    C                   PARM                    FeWe   
    C                   PARM                    WERT     
    
    
    C/EXEC SQL                                                 
    C+ SET :wert =(                                            
    C+ select xxwert from DateiA                               
    C+ where (xxa, xxb)                                  
    C+ in(select yya, yyb from DateiB where feld=:FeWe)
    C+ group by xxwert)                                        
    C/END-EXEC
    Das geht nicht!
    Code:
    SQL0312  30      34  Position 14 Variable wert nicht definiert oder nicht   
                         verwendbar. Reason: The host structure is a dimensioned
                         array.
    Toll, gibt es eine alternative? Danke

    Dietlinde Beck

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.202
    Leider nur Occurs.
    Die Ansprache ist dann nicht in Klammern sondern man muss per Occur(n) auf den Satz setzen.

    Allerdings gibt es einen kleinen Trick.

    d MyOcurDs ds occurs(nn)

    d MyPtr * inz(%addr(MyOcurDS))
    d MyDimDs ds dim(nn) based(MyPtr)

    Falls der Compiler den Inz ablehnt, kann man den zur Laufzeit auch festlegen.
    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
    Hallo,

    eigentlich sollte das ganz normal gehen. Probier es mal so:

    Code:
    D wert            DS                  DIM(99) QUALIFIED  
    D we                             7S 0                    
    
    C     *ENTRY        PLIST                          
    C                   PARM                    FeWe   
    C                   PARM                    WERT 
    
    Exec Sql Declare c1 Cursor for
    	select xxwert from DateiA                               
    	where (xxa, xxb)                                  
    	in(select yya, yyb from DateiB where feld=:FeWe)
    	group by xxwert;
    
    Exec Sql open c1;
    
    Exec Sql Fetch c1 For 99 Rows Into :wert;
    lg Andreas

  4. #4
    Registriert seit
    Apr 2005
    Beiträge
    385
    Mit Cursor ja, Statisch wie vom TE gechrieben nein.

    Ich persönlich arbeite auch lieber ohne Cursor...

  5. #5
    Registriert seit
    Nov 2009
    Beiträge
    208
    Hallo Andreas, vielen Dank
    es ist zwar etwas umständlicher aber es geht so.
    Danke
    VG
    DiBe

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.202
    Wie willst du ohne Cursor mehrere Zeilen bearbeiten;-)?
    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
    Jan 2012
    Beiträge
    1.102
    Wenn das mit dem Cursor geht (wie von Andreas beschrieben), geht es dann vielleicht auch mit select into? (Das würde den Cursor sparen)

    Code:
    Exec Sql select xxwert into :wert from DateiA                               
        where (xxa, xxb)                                  
        in(select yya, yyb from DateiB where feld=:FeWe)
        group by xxwert
    fetch first 99 rows only;
    (Ich habe es nicht ausprobiert)

    Dieter

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.202
    Der wesentliche Unterschied ist, dass ein "Select ... Into ..." ausschließlich maximal 1 Ergebniszeile erlaubt. Somit stellt sich das DIM-Problem da nicht.

    The SELECT INTO statement produces a result table consisting of at most one row,
    and assigns the values in that row to variables.

    Only one row may be specified in the fetch-first-clause.
    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

Similar Threads

  1. SQL Procedure call SQLRPGLE mit Array input
    By dholtmann in forum NEWSboard Programmierung
    Antworten: 0
    Letzter Beitrag: 30-05-18, 10:28
  2. Ganzes Array mit %char umwandeln
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 12-12-17, 12:35
  3. mehrdimensionalen Array durchsuchen
    By svit in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 01-10-15, 12:54
  4. suche in Datenstruktur Array
    By woodstock99 in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 15-01-14, 17:57
  5. Array mit Sql befüllen
    By tarkusch in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 25-12-13, 15:15

Berechtigungen

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