[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Mar 2006
    Beiträge
    98

    Dynamisches SQL bauen in RPG

    Ich habe vor im SQLRPGLE -Embedded-SQL Dynamisch das SQL-zu bauen.
    Probleme die ich dabei habe:
    - es ist eine Große Menge an Daten. (Select *) und alle Felder in eine Dateibeschriebene Datenstruktur läuft nur langsam
    -ich möchte nur bestimmte Felder auswählen und die entsprechend mit Fetch into dann verarbeiten (Fetch verlangt aber Varieblen oder DS) die ich aber nicht gleich kenne(von Benutzer auswählbar)

    -beim Gruppierung möchte ich noch innerhab der Gruppen sortieren

    Hat jemand eine Idee.
    Danke

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    So dynamisch ist RPGLE leider nicht.
    Du kannst per Describe Statement dir eine SQLDA übergeben lassen.
    An Hand der SQL-Typen (laut SQLDA) setzt du dann Pointer in die SQLDA für die Felder deiner DS.
    Beim Fetch nutzt du dann USING SQLDA MYSQLDA.
    Alles leider etwas mühsam.
    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
    Mar 2006
    Beiträge
    98
    Danke für Antwort.
    Wenn es einfach wäre hätte ich nicht gefragt.
    Haben Sie vielleicht Beispiele. Habe damit noch nie gearbeitet.
    Wenn ich gruppierung, summen usw. will, muss ich wahrscheinlich dieses so machen.
    nochmals Danke
    Gruß

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... die Anzahl der Felder ist nicht das, was die Zeit verbraucht, das liegt eher an der Sortierung (falls da kein Index da ist), oder an Auswahlkriterien.

    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/

  5. #5
    Registriert seit
    Mar 2006
    Beiträge
    98
    Wie kriege ich es erst dynamisch mit dem Feldauswahl und dem Gruppierung.
    ist es so richtig:???

    FETCH C1 USING DESCRIPTOR :SQLDA ;


    D* SQL Descriptor area
    D SQLDA DS
    D SQLDAID 1 8A
    D SQLDABC 9 12B 0
    D SQLN 13 14B 0
    D SQLD 15 16B 0
    D SQL_VAR 80A DIM(SQL_NUM)
    D 17 18B 0
    D 19 20B 0
    D 21 32A
    D 33 48*
    D 49 64*
    D 65 66B 0
    D 67 96A
    D*
    DSQLVAR DS
    D SQLTYPE 1 2B 0
    D SQLLEN 3 4B 0
    D SQLRES 5 16A
    D SQLDATA 17 32*
    D SQLIND 33 48*
    D SQLNAMELEN 49 50B 0
    D SQLNAME 51 80A
    D* End of SQLDA
    D*
    beim Wandeln fehler: SQL_NUM und SQL_Var nicht definiert sind???


    Danke

  6. #6
    Registriert seit
    Apr 2005
    Beiträge
    385
    Beim zusammenbauen des SELECT kann man auch Felder die wefallen durhc konstanten ersetzen!

    SELECT NAME, KUNDENNR, SUM(UMSATZ), SUM(MENGE) FROM FILE ORDER BY NAME GROUP BY NAME, KUNDENNR

    Kann man auch alternativ
    SELECT NAME, ' ', SUM(UMSATZ), 0 FROm FILE ORDER BY NAME GROUP BY NAME

    Somit kann die Ziel-DS gleichbleiben, man muss nur wissen wo was drin steht....

    Nicht schön aber flexibel...

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... bringt aber NullKommaNix, da der Satz ohnehin komplett gelesen wird, die Konstanten von der Datenbank ins Programm geliefert und dann gemapped werden. Das isr aber so oder so nur Arbeitsbeschaffung für den Programmierer...

    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/

  8. #8
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    SQL_NUM muss als Integer-Feld definiert und mit der maximal zu erwartenden Anzahl an Spalten inititalisiert werden.

    Für jedes zurückgegebene Feld bzw. jede ausgewählte Spalte wird ein Element in der SQLVAR Feldgruppe/Datenstruktur gefüllt. In SQLTYPE wird der numerische Datentyp der Spalte (Beschreibung in SQL Reference in Appendix D), in SQLLEN die Datenlänge und in SQLDATA wird ein Pointer auf die Spalten-Daten ausgegeben. Diese Informationen musst Du dann verarbeiten.

    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
    Feb 2001
    Beiträge
    20.241
    Wobei der Pointer selber, z.B. mittels %adr() oder %alloc(), gesetzt werden muss.
    Per Describe Statement übergibt man eine SQLDA-Struktur mit genügend Anzahl Elementen, anschließend kann man dann die Pointer setzen.
    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. Dynamisches embedded SQL
    By Tschabo in forum NEWSboard Programmierung
    Antworten: 10
    Letzter Beitrag: 11-03-21, 09:14
  2. Antworten: 7
    Letzter Beitrag: 23-03-15, 17:21
  3. Artikel: SQL: dynamisches Select ohne Cursor
    By NEWSolutions Redaktion in forum NEWSolutions artikel
    Antworten: 0
    Letzter Beitrag: 05-12-13, 18:03
  4. Lpar AS selber bauen ?
    By Robi in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 29-05-03, 08:00
  5. TCP/IP-Leitwege - Dynamisches Eintragen verhindern?
    By mott in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 18-09-02, 15:42

Berechtigungen

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