[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Sep 2005
    Beiträge
    425

    Feldgruppe mit einem SQL Stmt füllen

    Hi,
    ich möchte aus einer Datei 10 - 15 Sätze selektieren und in eine Feldgruppe schreiben.

    Das ganze soll idealerweise mit SQL geschehen.
    Muß ich da in Schleife fetchen
    oder geht sowas wie
    Code:
    select wert from Datei into :Feldgruppe where Bedingung 
    (for all records oder etwas ähnliches)
    und ist das dann ein "result set" ?

    Danke Max

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    declare c1 cursor for select ...
    open cursor c1
    fetch from c1 for 10 rows into :myds
    close c1

    ein Blick in die SQL Reference hilft ungemein

    D*B

    Zitat Zitat von ILEMax Beitrag anzeigen
    Hi,
    ich möchte aus einer Datei 10 - 15 Sätze selektieren und in eine Feldgruppe schreiben.

    Das ganze soll idealerweise mit SQL geschehen.
    Muß ich da in Schleife fetchen
    oder geht sowas wie
    Code:
    select wert from Datei into :Feldgruppe where Bedingung 
    (for all records oder etwas ähnliches)
    und ist das dann ein "result set" ?

    Danke Max
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  3. #3
    Registriert seit
    Sep 2005
    Beiträge
    425
    Hi und danke

    so ähnlich hätte ich es auch gemacht

    Aber das ... for 10 rows
    geht m.e. so nicht, da ich ja nicht weis ob es 10, 12 oder 15 Werte sind.

    mit declare und fetch ist das schon klar (dank Sql Reference)
    Wenn auch mit der Schleifenbedingung im RPG.
    Hatte gehoft es ohne machen zu können

    Max

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Vielleicht wurde das aus Dieters Antwort nicht ganz klar:

    Du kannst nicht direkt in eine Feldgruppe fetchen, wohl aber in eine Array Datenstruktur oder eine Mehrfach-Datenstruktur.

    Code:
    D   MyDS        DS                      Dim(100)
    D    MyFld                          10A
    Unter Result Sets versteht man i.d.R. Tabellen (mit beliebig vielen Sätzen) die aus einer Stored Procedure zurückgegeben werden.

    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

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    @Birgitta: Feldgruppen Arrays und den Firlefanz habe ich bereits verdrängt

    @ILEMax: man gibt die obere Menge an (soviele, wie DIM bei der DS) und in der SQLDA steht drin wieviele man wirklich bekommt.
    Vorteil für diesen multiple row fetch ist die Geschwindigkeit. 1000 Sätze dauern ungefär solange wie einer!
    Nachteil ist die etwas kompliziertere Schleifenlogik und dass kein positionierter update mehr geht; letzteres frisst den Zeitvorteil mehr als auf, wenn man alle Sätze ändern will.

    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/

  6. #6
    Registriert seit
    Sep 2005
    Beiträge
    425
    @Birgitta
    Doch doch, das hätt ich so definiert

    @BenderD
    Prima, danke! das hilft !!

  7. #7
    Registriert seit
    Sep 2005
    Beiträge
    425
    Jetz muß ich doch noch mal fragen ...

    D MyDS DS Dim(100)
    D MyFld 10A
    geht nicht, da fehlt ein qualified
    Und wenn ich dann ein lookup mache geht der wiederum nicht.

    *RNF5123 30 421 013900 Eintrag für Faktor 2 der Operation LOOKUP ist keine Tabelle

    IleMax

  8. #8
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    OpCode LOOKUP kann nicht für Array-Datenstrukturen verwendet werden. Die Built-In-Funktionen %LOOKUPxx können (ab Release 7.1 --> %LookUp('XXX': MyArrDS(*).Subfield) ) für Array-Datenstrukturen verwendet werden.

    Ansonsten hilft nur eins: Array-Datenstruktur in Feldgruppe umladen und dann den Lookup machen.

    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

  9. #9
    Registriert seit
    Sep 2005
    Beiträge
    425
    Sorry aber ich bin wohl zu blöd.
    Mit
    D Frg s 4S 0 DIM(%elem(myds))

    movea Myds Fgr

    kommt nur das 1. Element an. So dusselig kann man sich doch garnich anstellen oder ?
    Max

  10. #10
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Das Problem liegt daran, dass Array Datenstrukturen und Feldgruppen anders aufgebaut sind.

    MoveA funktioniert auf keinen Fall.

    Da in der Array-Datenstruktur nur ein Unterfeld definiert ist und angenommen das Datenstruktur-Unterfeld ist genau so definiert wie das Feldgruppen Element, könnte das Ganze wie folgt funktionieren.

    Code:
    D MyArrDS       DS                              Dim(100) qualified
    D   MyFld                                 10A
    
    D MyFGDS        DS
    D   MyFG                                  10A    Dim(%Elem(MyArrDS))
    
     /Free
        MyFGDS = MyArrDS;
     /End-Free
    Sollte dies nicht funktionieren, musst Du leider eine Schleife bauen:
    Code:
     /Free
        For Index =  1 to %Elem(MyArrDS)
             MyFG(Index) = MyArrDS(Index).MyFld;
        EndFor;
     /End-Free
    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

  11. #11
    Registriert seit
    Sep 2005
    Beiträge
    425
    Code:
    D MASN            DS                  DIM(30) QUALIFIED     
    D  MA                            4S 0                       
    D                 DS                                        
    D M                              4S 0 DIM(%ELEM(MASN))
    oder
    Code:
    D MASN            DS                  DIM(30) QUALIFIED     
    D  MA                            4S 0                       
    D mm              DS                                        
    D M                              4S 0 DIM(%ELEM(MASN))
    Beides versucht.
    sowohl die schleife als auch dein 1. vorschlag bringen
    Code:
    *RNF5343 30    505 019600  Feldgruppe hat zu viele übergangene Indizes; die Bestimmung
                               wird ignoriert.
    Wuste gar nicht,das ILERPG so schwer ist.

    HILFE
    Max

  12. #12
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Also ... das folgende Beispiel kann problemlos umgewandelt werden (Release V5R4).

    Code:
    D MyArrDS         DS                  Qualified Dim(10) inz    
     D   MyFld                        4S 0                          
                                                                    
     D MyFGDS          DS                  Inz                      
     D   MyFg                         4S 0 Dim(%Elem(MyArrDS))      
                                                                    
     D Index           S              3U 0                          
      ***********************************************
      /Free                                                         
        *InLR = *On;                                               
                                                                    
         MyArrDS(1).MyFld = 111;                                 
         MyArrDS(2).MyFld = 222;                                 
         MyArrDS(3).MyFld = 333;                                 
                                                                    
         Clear MyFg;                                             
         For Index =  1 To %Elem(MyArrDS);              
             MyFg(Index) = MyArrDS(Index).MyFld;        
         EndFor;                                        
                                                          
        Return;                                           
     /End-Free
    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

Similar Threads

  1. ILE RPG / SQL Füllen einer Feldgruppe
    By homue in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 18-07-07, 16:47
  2. RPGLE - SQL
    By christian_lettner in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-11-06, 10:15
  3. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  4. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  5. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43

Berechtigungen

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