PDA

View Full Version : RPG mit Embedded SQL, JOIN ..



loeweadolf
16-06-06, 18:34
Hallo,

in einem RPG-Programm mit embedded SQL möchte ich 2 Dateien mit identischem Suchbegriff bearbeiten (Dateien sind per DDS erstellt worden)

Leider ist der Suchbegriff in Datei A folgendermassen definiert:
8-st alphan., ist immer gefüllt mit einer Zahl
von 00001 bis bis 99999, die 3 führenden Stellen sind immer = ´000´.

Der Suchbegriff in Datei B ist 5-stellig numerisch (5S 0).

Können diese unterschiedlich defiierten Begriffe verbunden werden ?

B.Hauser
16-06-06, 19:48
Hallo,

das müsste funktionieren, Du musst lediglich die Join-Felder entsprechend aufbereiten.


C/EXEC SQL
C+ Declare MyCsr ...
C+ SELECT Fld1, Fld2, Fld3
C+ from MyFileA join MyFileB on Substr(KeyA, 4, 5) = Digits(KeyB)
C+ Where ...
C/End-Exec


oder



C/EXEC SQL
C+ Declare MyCsr ...
C+ SELECT Fld1, Fld2, Fld3
C+ from MyFileA join MyFileB on Cast(KeyA as Dec(5, 0)) = KeyB
C+ Where ...
C/End-Exec


Soweit ich weiß, können sogar ab Release V5R3M0 numerische Felder direkt mit alphanumerischen Feldern, die nur Ziffern enthalten verknüpft werden (d.h. eine Aufbereitung ist nicht notwendig!)

Birgitta

BenderD
17-06-06, 07:50
Hallo,

läuft aber nicht so dolle, bei großen Datenbeständen könnte da eine zusätzliche Tabelle, mit zwei Feldern, in einem das Huddelfeld, in dem anderen das numerische und zwei Indexe dem auf die Sprünge helfen. Oder man macht es ordentlich und nimmt in die Datei mit dem Huddelfeld einen ordentlichen (foreign) key mit auf.

mfg

Dieter Bender



Hallo,

das müsste funktionieren, Du musst lediglich die Join-Felder entsprechend aufbereiten.


C/EXEC SQL
C+ Declare MyCsr ...
C+ SELECT Fld1, Fld2, Fld3
C+ from MyFileA join MyFileB on Substr(KeyA, 4, 5) = Digits(KeyB)
C+ Where ...
C/End-Exec


oder



C/EXEC SQL
C+ Declare MyCsr ...
C+ SELECT Fld1, Fld2, Fld3
C+ from MyFileA join MyFileB on Cast(KeyA as Dec(5, 0)) = KeyB
C+ Where ...
C/End-Exec


Soweit ich weiß, können sogar ab Release V5R3M0 numerische Felder direkt mit alphanumerischen Feldern, die nur Ziffern enthalten verknüpft werden (d.h. eine Aufbereitung ist nicht notwendig!)

Birgitta

loeweadolf
18-06-06, 12:14
Danke für die Antworten.

Ich habe festgestellt, dass in den beiden Dateien noch weitere Kriterien auf Übereinstimmung geprüft werden müssen.

Unter anderem gibt es ein Datum, in Datei A: 4 x 2,0 definiert, in der anderen Datei richtig als Datums-Feld angegeben.

Ich löse die Sache jetzt folgendermassen:
mit SQL die Haupt-Datei lesen (mit entspr. Filter), dazu mit RPG-Anweisung den jeweils in der anderen Datei benötigten Satz dazu lesen.

Die Unterschiede in der Definition kommen daher, dass die Dateien aus verschiedenen Anwendungs-Bereichen von unterschiedlichen Entwicklern zu unterschiedlichen Zeiten erstellt wurden.

mfg Ludger