PDA

View Full Version : Embedded SQL in RPGLE Programm?



Seiten : [1] 2

kkirnbauer
05-06-13, 07:09
Hallo,

ich möchte ein bestehendes RPGLE Programm mit einem Embedded SQL Befehl erweitern. Leider kennt das RPGLE Programm die SQL Befehle nicht. Wenn ich jedoch ein SQLPRGLE Programm erstelle, werden die Befehle erkannt.

Wie ist die empfohlene Vorgangsweise um embedded SQL Befehle in RPGLE zu nutzen?

conni-gs
05-06-13, 07:40
Die Teildateiart wurde auf SQLRPGLE geändert?

kkirnbauer
05-06-13, 07:51
ja wenn ich die Teildateiart auf SQLRPGLE ändere funktioniert es. Gibt es Nachteile wenn ich das mache?

dschroeder
05-06-13, 07:57
Das ist die Standard-Vorgehensweise. Nachteile sehe ich nicht. Alternativ könntest du dir ein SQLRPGLE-Tool schreiben, dem du den zu verarbeitenden SQL-Befehl als String mitgibst. Das könntest du dann in jedem RPGLE-Programm aufrufen. Ob das sinnvoll ist, kommt aber auf deine Problemstellung an.
Dieter

B.Hauser
05-06-13, 08:46
Vielleicht zur Information:
Bei Quellen mit der Quellen-Art SQLRPGLE wird bei der Kompilierung zunächst der SQL Precompiler aufgerufen. Der SQL Precompiler scannt nach SQL Befehlen und den Host-Variablen, die in diesen Befehlen verwendet werden und führt einen Syntax Check durch. Konnte an dieser Stelle kein Fehler gefunden werden, wird die Original-Quelle in eine Quellen-Datei in der QTEMP kopiert, die SQL Befehle auskommentiert, durch API-Aufrufe ersetzt und die SQLCA (Communication Area) sowie einige andere Variablen und Konstanten eingebunden.
Die konvertierte Quelle wird anschließend durch den normalen Language Compiler gejagt, also entweder mit CRTBNDRPG oder mit CRTRPGMOD umgewandelt.

Birgitta

Robi
05-06-13, 14:10
Ich habs zwar schon länger nicht probiert,
aber früher (als wir noch einen Kaiser hatten)
konnte sqlrpgle kein /copy in /copy auflösen

also:

PGM:
...
define d_spec
/copy machwas
undefine d_spec

/copy tu_es

und in machwas
...
if defined tu_es
/copy d_spec_vom_pgm
D ...
D...
endif

C ...
C...

Robi

B.Hauser
05-06-13, 14:35
Auf die Gefahr hin, dass ich wieder mal als "Oberlehrerin" bezeichnet werde.

Der /COPY wird aufgelöst (über wieviele Verschachtelungen kann im Compile-Befehl hinterlegt werden).

Der /INCLUDE funktioniert wie ein /COPY wird jedoch vom PreCompiler nicht aufgelöst.

Birgitta

Anton Gombkötö
05-06-13, 14:50
Problematik längst gelöst:
Using /COPY, /INCLUDE in Source Files with Embedded SQL (http://publib.boulder.ibm.com/iseries/v5r1/ic2924/books/c092508338.htm)

Fuerchau
06-06-13, 14:05
Mit anderen Worten:
Stelle ich meine Quellen auf IFS um (wie von RDi/RDp o.ä. empfohlen), wobei ich dann auf "/Include" angewiesen bin, kann ich keine SQL-Programme mehr schreiben.

Wer sich da wohl was bei gedacht hat.

Ach ja, der PreCompiler kann ja noch nicht mal geschachtelte Copies :(.

B.Hauser
06-06-13, 14:28
Mit anderen Worten:
Stelle ich meine Quellen auf IFS um (wie von RDi/RDp o.ä. empfohlen), wobei ich dann auf "/Include" angewiesen bin, kann ich keine SQL-Programme mehr schreiben.

Wer sich da wohl was bei gedacht hat.

Ach ja, der PreCompiler kann ja noch nicht mal geschachtelte Copies :(.

Warum solltest Du denn auf den /INCLUDE angewiesen sein, wenn sich die Quellen im IFS befinden?

Lt. RPG Referenz kann man in beiden sowohl Teildateien als auch IFS-Dateien angeben.


The /COPY and /INCLUDE compiler directives cause records from other files to be inserted, at the point where the directive occurs, with the file being compiled.
The inserted files may contain any valid specification including /COPY and /INCLUDE up to the maximum nesting depth specified by the COPYNESTkeyword (32 when not specified).

/COPY and /INCLUDE files can be either physical files or IFS files.

Und verschachtelte Copy-Strecken kann der Precompiler sehr wohl (und zwar schon seit V5R3!). Du must lediglich im Compile Command RPG-Vorprozessoroptionen (RPGPPOPT) auf *LVL1 setzen.

Ach ja und bei *LVL2 werden auch die (verschachtelten) /INCLUDES aufgelöst.

Birgitta