-
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.
-
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
-
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
-
Zitat von B.Hauser
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
-
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.
-
Zitat von Fuerchau
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
Similar Threads
-
By dschroeder in forum NEWSboard Programmierung
Antworten: 7
Letzter Beitrag: 24-08-15, 13:05
-
By Pampelmuse in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 28-08-08, 16:40
-
By homue in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 28-09-07, 16:03
-
By harkne in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 04-01-06, 16:44
-
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
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks