PDA

View Full Version : embedded-SQL fetch über mehrere Dateien



Seiten : [1] 2

zannaleer
24-01-05, 13:11
Hallo Forum,

wie muß eine Datenstruktur aufgebaut sein, wenn beim embedded-SQL auf mehrere Dateien zugegriffen wird?
Greife ich nur auf eine Datei zu, baue ich die Ergebnis-Datenstruktur für das "fetch into" genauso auf, wie die Datei. Wie muss ich diese aber aufbauen, wenn über eine join-Anweisung mehrere Dateien verknüpft werden?

Gruß
Alexander.

mk
24-01-05, 13:15
HAllo Alexander,

die Datenstruktur muss genauso aussehen
wie die Felder in der Select klausel.

Gruss Michael

zannaleer
24-01-05, 13:19
Hallo Michael,

das weiß ich und genau das ist ja das Problem. Ich möchte nicht jedes einzelne Feld der Datenstruktur manuell definieren, sondern so ähnlich wie bei einer Datenstruktur, die die Felder nur einer Datei enthält mit "extfile" arbeiten.

Gruß
Alexander

Fuerchau
24-01-05, 13:29
Irgendwo ist der manuelle Aufwand nötig.
Entweder definierst du eine PF per DDS, die genau die Struktur deines Joins beinhaltet, dann kannst du diese als externe DS übernehmen oder du definierst die Felder halt in einer eigenen Struktur.
Wenn du die einzelnen Felder nicht explizit ausdefinieren wills (also Typ und Länge) kannst du per LIKE (ILERPG) die Definition übernehmen.

Woher soll SQL denn die Struktur kennen, wenn sie nicht definiert ist ?

zannaleer
24-01-05, 13:32
Ich habe mir halt gedacht, dass es so oder ähnlich funktionieren könnte:


* Datenstrukturen
d Ds_AAP e ds extname(AAP)
d Ds_AAI e ds extname(AAI)
d Ds_AAK e ds extname(AAK)

d Ds_AAI_Sql ds occurs(7)
d Ds_AAP
d Ds_AAI
d Ds_AAK

Und die Datenstruktut Ds_AAI_Sql ist die, die ich beim fetch into verwende.

Fuerchau
24-01-05, 13:36
Damit kann SQL nun mal nicht zurechtkommen.
Du kommst um eine explizite Definition (egal ob extern oder intern) der Felder nicht herum.
Es ist auch nicht gerade von Vorteil, beim Join mit einem "SELECT *" zu arbeiten.
Überhaupt sollte man beim SQL nur genau die Felder auswählen, die man auch tatsächlich braucht.
Dann sind spätere Dateiänderungen/-erweiterungen nicht mehr kritisch.

BenderD
24-01-05, 13:57
Hallo,

schnöderweise so:
CREATE VIEW myview as ....
und dann einfach als externe DS mit EXTNAME(MYVIEW) im Programm deklarieren.

mfg

Dieter Bender



Hallo Forum,

wie muß eine Datenstruktur aufgebaut sein, wenn beim embedded-SQL auf mehrere Dateien zugegriffen wird?
Greife ich nur auf eine Datei zu, baue ich die Ergebnis-Datenstruktur für das "fetch into" genauso auf, wie die Datei. Wie muss ich diese aber aufbauen, wenn über eine join-Anweisung mehrere Dateien verknüpft werden?

Gruß
Alexander.

Fuerchau
24-01-05, 16:45
Dann kann ich auch direkt mit "select * from myview" arbeiten ;)

BenderD
24-01-05, 17:28
... und bei Änderungen am Dateiaufbau etc. ändert sich immer nur die View und nicht das Programm (siehe auch Thread Dateiänderung ohne recompile)

mfg

Dieter Bender


Dann kann ich auch direkt mit "select * from myview" arbeiten ;)

B.Hauser
29-01-05, 15:43
Ein Recompile ist allerdings nur dann nicht erforderlich, wenn einzelne Felder ausgewählt und in einer Datenstruktur zusammengefasst wurden.

Wird eine externe Datenstruktur und SELECT * verwendet, ist ein Recompile wie bei anderen Datei-Änderungen erforderlich.

@Zannaleer
Du kannst auch folgendes versuchen:
Die einzelnen Dateien als Externe Mehrfach Datenstrukturen definieren und beim Fetch diese Datenstrukturen aufzählen.



d Ds_AAP e ds extname(AAP) occurs(7)
d Ds_AAI e ds extname(AAI) occurs(7)
d Ds_AAK e ds extname(AAK) occurs(7)

c/EXEC SQL FETCH Next from MyCursor for 7 Rows
C+ into :DS_AAP, :DS_AAI, :DS_AAK
C/END-EXEC

Diese Lösung funktionniert zumindest beim Single Row Fetch, beim Multiple Row Fetch habe ich es noch nicht probiert.

Die bessere Lösung ist allerdings eine SQL-View zu benutzen.
Dies vereinfacht nicht nur den Code, sondern ist zudem auch noch performanter als ein direkter JOIN im Programm.

Birgitta