PDA

View Full Version : SQLRPGLE Infos zu verwendeten Feldern auslesen



Peet
21-03-14, 18:28
Hallo zusammen,

ich wüsste gerne, ob ich die Felder (Anzahl und oder Name), die von einem SELECT in einem SQLRPGLE verwendet werden, "auslesen" kann ?

Hintergrund ist, dass der SQL-Befehl an das RPG-Programm übergeben wird und dort "nur" ausgeführt wird, die Daten werden via *table-Objekt (Script Net.Data) zurückgegeben.

Nun wäre es für mich wichtig, "flexibel" auf die Feldliste reagieren zu können !

Vielen Dank im Voraus !
Peet :rolleyes:

Fuerchau
23-03-14, 07:52
Wenn dein Programm den SQL bekommt, kannst du den SQL ja parsen, m.a.W, also selber analysieren.
Indirekt geht das nach dem Prepare auch per "describe statement", dabei erhältst du dann in einer SQLDA-Tabelle die Ergebnisnamen des Select's.
Auf den Ursprungsnamen oder dieTabelle bei Joins kommst du da leider nicht, wenn Umbenennungen im SQL erfolgen.

Peet
25-03-14, 10:28
Wenn dein Programm den SQL bekommt, kannst du den SQL ja parsen, m.a.W, also selber analysieren.
Indirekt geht das nach dem Prepare auch per "describe statement", dabei erhältst du dann in einer SQLDA-Tabelle die Ergebnisnamen des Select's.
Auf den Ursprungsnamen oder dieTabelle bei Joins kommst du da leider nicht, wenn Umbenennungen im SQL erfolgen.

Hallo,
vielen Dank für die Infos.
Hast du ggf. ein Beispiel fürs "parsen" oder "describe statement" ?

Gruß...

Fuerchau
25-03-14, 11:52
Nunja, parsen heißt, den SQL-String selber in Worte zerlegen, Syntax beachten und Feldnamen extrahieren.
Welcher Name nun zu welcher Tabelle gehört (CTE, Join, Subselect u.v.m.) ist dann noch aufwendiger.

Wenn du den SQL per Prepare vorbereitet hast, kannst du diesen per "describe ..." analysieren.
Hierbei werden wie gesagt nur Ergebnisnamen geliefert.

Den Describe-Befehl kannst du im SQL-Reference-Handbuch nachlesen.

B.Hauser
25-03-14, 12:02
Vielleicht noch eine kleine pragmatische Idee, die jedoch nur dann funktioniert, wenn die Felder alle benannt sind:
1. Erstelle einfach eine Tabelle (nicht in der QTEMP) sondern irgendeiner Arbeits-Bibliothek basierend auf dem SELECT-Statement und ohne Daten.
z.B. so CREATE TABLE MyLib/MyTable as (SELECT ....) with no Data;
2. Anschließend kannst Du die Spalten-Namen, Anzahl und Reihenfolge der Spalten, sowie deren Definition aus der Catalog-View SYSCOLUMNS auslesen.
3. Lösche die Arbeitsdatei wieder.

Birgitta

Peet
25-03-14, 13:41
Vielleicht noch eine kleine pragmatische Idee, die jedoch nur dann funktioniert, wenn die Felder alle benannt sind:
1. Erstelle einfach eine Tabelle (nicht in der QTEMP) sondern irgendeiner Arbeits-Bibliothek basierend auf dem SELECT-Statement und ohne Daten.
z.B. so CREATE TABLE MyLib/MyTable as (SELECT ....) with no Data;
2. Anschließend kannst Du die Spalten-Namen, Anzahl und Reihenfolge der Spalten, sowie deren Definition aus der Catalog-View SYSCOLUMNS auslesen.
3. Lösche die Arbeitsdatei wieder.

Birgitta


Hallo zusammen,

vielen Dank an euch beide für die Infos und Ideen.
Ich werde die Vorschläge mal testen.

Gruß
peet ;)