[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Feb 2001
    Beiträge
    20.270
    Das Handling mit temporären Tabellen hat sich generell vereinfacht.
    Stichwort: Global Temporary Table (GTT)
    Die GTT wird im Programm einfach per SQL definiert.
    Programm A => Insert into GTT
    Programm B => Select * from GTT

    https://www.ibm.com/docs/en/i/7.3?to...emporary-table

    Die GTT ist eine Tabelle in der QTEMP die automatisch erstellt und wieder gelöscht wird.

    Ein Array als Tabelle geht zwar auch, das ist jedoch veraltet.
    Dafür musst du eine externe SQL-Prozedure mit "returns table ..." definieren.
    Im ILERPG kannst du dann das Array laden und beim Verlassen einen "exec sql return table ...." ausführen.
    Da sind GTT's erheblich einfacher.
    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

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.879
    Frage: Was würde denn an dieser Stelle gegen dynamisches SQL sprechen?

    Den Inhalt des Arrays mit als String aufbereiten (z.B. mit der RPG Built-In-Function %CONCATARR).
    Und dann das SQL Statement dynamisch aufbereiten und in den WHERE-Bedingungen bei einer IN-Anweisung den String einbinden (etwa so).

    Code:
    StingArr = %CONCATARR(', ': YourArr);
    
    CmdSQL = 'SELECT ... +
                 FROM ... +
                 WHERE YourCol In (' concat :StringArr concat ')' +
                 ...'
    //Prepare
    //Declare
    //Open
    //Fetch
    //Close
    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

  3. #3
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    Nochmals vielen Dank für eure Antworten.

    Ich habe ja keine Schwierigkeiten, das Problem an sich zu lösen. Mir sind auch diverse Möglichkeiten bewusst (u. a, dynamisches SQL).
    Ich wollte einfach mal wissen, ob sich da irgendetwas getan hat und man Arrays vielleicht inzwischen sehr einfach mit statischem SQL verarbeiten kann.
    Ich hatte mir schon gedacht, dass das nicht so einfach geht. Aber manchmal gibt es ja neue Ideen.

    Die Sache mit den global tables in SQL habe ich noch nie benutzt. Aber ich muss gestehen, auf die Schnelle sehe ich auch keinen Unterschied zu einer "normalen" per SQL erstellten Tabelle in QTEMP.

    Ich verabschiede mich jetzt erstmal in einen Kurzurlaub!

    Euch alles Gute!

    LG, Dieter

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.288
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Frage: Was würde denn an dieser Stelle gegen dynamisches SQL sprechen?

    Den Inhalt des Arrays mit als String aufbereiten (z.B. mit der RPG Built-In-Function %CONCATARR).
    Und dann das SQL Statement dynamisch aufbereiten und in den WHERE-Bedingungen bei einer IN-Anweisung den String einbinden (etwa so).

    Code:
    StingArr = %CONCATARR(', ': YourArr);
    
    CmdSQL = 'SELECT ... +
                 FROM ... +
                 WHERE YourCol In (' concat :StringArr concat ')' +
                 ...'
    //Prepare
    //Declare
    //Open
    //Fetch
    //Close
    ... der O'Hara Effekt.

    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
    Feb 2001
    Beiträge
    20.270
    Aber Dieter, noch nichts von Replace gehört?
    Bei der Stringaufbereitung dann jedes Feld noch per %replace oder noch besser;-) per SQL Replace anzupassen.

    GTT werden im Programm deklariert, der Create Table wird automatisch gemacht.
    Beim alten Standard ist das halt mit den statischen SQL's das Problem, dass du zur Compile-Zeit eine Tabelle benötigst, die du dann zur Laufzeit ggf. nach QTEMP duplizierst und per OVRDBF umbiegst.
    GTT macht den Declare, so dass alle statischen SQL's damit zur Compilezeit umgesetzt werden können. Und die QTEMP wird dann automatisch verwaltet.
    Du hast Recht, es ist kein Unterschied, nur der Aufwand ist erheblich geringer.

    Ein DS-Array kann nur per Returns Table verwendet werden und ist überhaupt nicht elegant.
    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
    Mar 2002
    Beiträge
    5.288
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Aber Dieter, noch nichts von Replace gehört?
    Bei der Stringaufbereitung dann jedes Feld noch per %replace oder noch besser;-) per SQL Replace anzupassen.

    GTT werden im Programm deklariert, der Create Table wird automatisch gemacht.
    Beim alten Standard ist das halt mit den statischen SQL's das Problem, dass du zur Compile-Zeit eine Tabelle benötigst, die du dann zur Laufzeit ggf. nach QTEMP duplizierst und per OVRDBF umbiegst.
    GTT macht den Declare, so dass alle statischen SQL's damit zur Compilezeit umgesetzt werden können. Und die QTEMP wird dann automatisch verwaltet.
    Du hast Recht, es ist kein Unterschied, nur der Aufwand ist erheblich geringer.

    Ein DS-Array kann nur per Returns Table verwendet werden und ist überhaupt nicht elegant.
    ... von replace stand da nix - zum Glück hat ja DB2/400 (ich weiß, das "B" muß "b" heißen und "/400" heißt jetzt " for i" und "UDB" ist auch out) einen gewissen Grundschutz gegen injection...

    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/

Similar Threads

  1. Statisches Embedded SQL mit IN
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 24-08-15, 13:05
  2. WebServices *SRVPGM RPG "Variable Arrays"
    By Pampelmuse in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 28-08-08, 16:40
  3. Vergleich von gleichen Feldgruppen (arrays)
    By homue in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 28-09-07, 16:03
  4. Rückgabe eines Arrays aus einer Funktion
    By harkne in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 04-01-06, 16:44
  5. 2 Dimensionale Arrays mit RPG
    By Atomik in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 26-10-01, 14:07

Berechtigungen

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