dynamisches SQL in Cobol
- Dieses Thema hat 26 Antworten und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 17 Jahre, 4 Monaten von
Anonym.
-
AuthorPosts
-
22. Februar 2006 um 14:35 Uhr #2668
AnonymInaktivHi all,
wer kann mir sagen, wie ich die Beispielprogamme zum dynamischen SQL ( Hauptprog und Unterprog) aus Application Programming zum Laufen bekomme ?
Wenn ich das Hpro ohne DB2 wandle und dann das Upro mit DB2 aufgerufen wird, fehlt das DB2 in der JCL (-927 glaub ich war es).
Wandle ich beides als DB2-Programme, bekomme ich ein leeres DBRM und der Bind Package knallt.Wie muss ich also wandeln, und welche optionen muss ich beim bind Plan/package angeben ?
greets Perix
23. Februar 2006 um 7:12 Uhr #3077
AnonymInaktivHi Perix,
wenn’s der -927 war dann sollte es ausreichen das Programm unter dem Command-Processor (und damit unter TSO) laufen zu lassen. Sieht dann etwa fürs Programm DSNTEP2 so aus:
//DSNTEP2 EXEC PGM=IKJEFT01,DYNAMNBR=20
//STEPLIB DD DISP=SHR,DSN=DB2E.SDSNLOAD
//SYSPRINT DD SYSOUT=X
//SYSTSPRT DD SYSOUT=X
//SYSTSIN DD *
DSN SYSTEM (DSNE)
RUN PROGRAM (DSNTEP2) PLAN (DSNTEP2) PARMS (‚/ALIGN(LHS)‘)
//SYSIN DD *
SET CURRENT SQLID = ‚…‘;Für Anwendungsprogramm muss die Steplib noch um die entsprechende Loadlib erweitert werden.
MfG Rolf
23. Februar 2006 um 7:48 Uhr #3368
AnonymInaktivHallo Rolf and all,
ich hab das Ding gestern noch zum Laufen bekommen und zwar wie folgt.
HPRO = Hauptprogramm
UPRO = UnterprogrammHPRO- Precompile,
Compile,
Link,
Bind mit Parametern :
DSN SYSTEM(DBXY)
BIND PLAN(BVHPRO) OWNER(myowner) –
PKLIST(Plist.*) –
VALIDATE(BIND) ISOLATION(CS) CACHESIZE(256) –
ACQUIRE(ALLOCATE) RELEASE(DEALLOCATE) –
ACTION(REPLACE) RETAIN –
DYNAMICRULES(BIND)
ENDund kein bind Package
Upro
Precompile
Compile
Link
Bind mit Parametern
DSN SYSTEM(DBXY)
BIND PLAN(BVUPRO) OWNER(myowner) –
PKLIST(Plist.*) –
VALIDATE(BIND) ISOLATION(CS) CACHESIZE(256) –
ACQUIRE(ALLOCATE) RELEASE(DEALLOCATE) –
ACTION(REPLACE) RETAIN
END
Bind Package mit Parametern
DSN SYSTEM(DBXY)
BIND PACKAGE(Package) OWNER(myowner) MEMBER(BVUPRO) –
ACTION(REPLACE) VALIDATE(BIND) EXPLAIN(YES)
ENDUnd start des Upro über das Hpro mit IKJEFT01 und SYSTSIN DD *
DSN SYSTEM(DBXY)
RUN PROGRAM(HPRO) –
PLAN(HPRO) –
LIB(‚mylib‘)
END
/*So läuft es….
Hat einer dazu noch Anmerkungen, Komentare oder Verbesserungsvorschläge ??Gruß
Perix
23. Februar 2006 um 8:12 Uhr #3549
AnonymInaktivMöchte mal behaupten, das sich der -927 nicht durch Dynamicrules (Bind) verschwunden ist (nur falls du die Ursache dafür suchst).
MfG Rolf
15. März 2006 um 8:32 Uhr #3676
AnonymInaktivSo,
der SELECT funzt.
Jetzt klemmt der "einfache" EXECUTE mit Update o.ä.
Hat mal jemand mit "Parameter Markern" und Describe über die SQLDA gearbeitet ?
Theoretisch liest sich das ganz einfach, nur bei der Umsetzung in Cobol ergeben sich bei mir da ein paar Fragen.
Gibt es da Erfahrung bei Euch ?
Greets Perix
15. März 2006 um 10:03 Uhr #3768
AnonymInaktivHi,
wo klemmts denn genau? Hab das schon mal gemacht, allerdings in PL/I.
MfG rolf
15. März 2006 um 11:01 Uhr #3826
AnonymInaktivWie ich das sehe weiss ich im schlimmsten Fall ja weder die Anzahl, noch die Art der Parameter Marker.
Also kann ich vorher auch nicht die entsprechenden Hostvariablen definieren, weder die Größe (ein oder 300 Byte), noch die Art (pic x( ) oder doch eher pic comp ).und schließlich muß ich dann ja an den Adressen der Hostvariablen auch noch zur Ausführungszeit die richtigen Werte in einer adäquaten Form zur Verfügung stellen.
:-/ hmmmm :schwitz:15. März 2006 um 11:45 Uhr #3864
AnonymInaktivFür den schlimmsten Fall hast du recht, da wirds auch gerade in COBOL schwierig.
Die kritische Stelle ist wenn du den SQL-String zusammenbastelst. Immer wenn du ein Parameter-Marker (?) reinhängst, kannst du i. A. auch die SQLDA füllen (gilt für Input-Parameter).
Ansonsten wirds etwas kompliziert. Letztendlich bist du selbst für den Speicherbereich verantwortlich, den du DB2 zur Verfügung stellst. Wie der in COBOL belegt wird ist DB2 egal. In PL/I gibts für sowas die Speicherklasse Controlled, aber ich kenne keine Entsprechung in COBOL.
Es gibt div. Möglichkeiten für dyn. SQL, insbesonsdere mit fixer oder variabler Select-Clause und Input- bzw. Output-Parameter-Marker.
Im Application Programming and SQL-Guide sind die Möglichkeiten beschrieben (allerdings extrem komprimiert). Schau dir mal die Kapitel– Coding dynamic SQL in application programs (S. 535, bzw. ab S. 545)
– Sample COBOL dynamic SQL program (S. 931) (Adresszuweisungen und dyn. Speicherverwaltung)an (die Seitenangaben beziehen sich auf V8-Doku).
Vielleicht kannst du mal kurz skizzieren, was du vorhast. Aber eins vorweg: Die eierlegende Wollmilchsau ist am schwierigsten!
MfG Rolf
15. März 2006 um 11:56 Uhr #3893
AnonymInaktivHallo Rolf,
das Handbuch Application Programming and SQL Guide habe ich schon durchgeackert.
Das Cobol-Beispiel für den Select ist i.A. brauchbar. (Wenn auch nicht 1:1, da ein paar Fehler drin sind).
Nur eben bei dem Beispiel zum parameter marker über die SQLDA erschöpft sich die Literatur auf einen schlecht kommentierten PL/1 Auszug.
Und wenn schon dynamisch dann auch gleich richtig, also Eierlegende…..sau
Gruß
Perix
16. März 2006 um 8:30 Uhr #3915
AnonymInaktivHi Perix,
aber man muss sich das Leben ja nicht unnötig schwer machen. Was soll das Programm denn machen?
MfG Rolf
16. März 2006 um 9:32 Uhr #3926
AnonymInaktivHi Rolf,
in der Luxus-Version sollte eben Alles mit Allem bearbeitet werden könen.
Diesen Weg verfolge ich aber zur Zeit nur noch soooo.. hm.. akademisch… sagt man glaub ichFür den Praxiseinsatz kommt aber eher die einfachere Variante mit fixer Anzahl von Hostvars in Frage. Dazu hab ich keine Fragen
Greets
Perix16. März 2006 um 9:50 Uhr #3936
AnonymInaktivSry, ich versteh’s irgendwie nicht. Demnach willst du SQLs der Form
UPDATE table
SET col1 = ?, col2 = ?,….
WHERE cola = ? and colb = ? and….verarbeiten, du weisst aber nicht welche HVs verwendet werden?
MfG Rolf
16. März 2006 um 12:41 Uhr #3945
AnonymInaktivHallo Perix,
in einem Artikel von Craig Mullins wird die Arbeit mit Dynamic SQL und Cobol (Execute Immediate, SELECT Fixed List, SELECT Varying List) sehr schön beschrieben. Das sollte Dir ein Stückchen weiterhelfen.
Using Dynamic SQL for Maximum Flexibility
By Craig S. Mullins
http://www.craigsmullins.com/dbu_1004.htmGruß
Gernot
16. März 2006 um 12:53 Uhr #3951
AnonymInaktivRolfD wrote: Sry, ich versteh’s irgendwie nicht. Demnach willst du SQLs der Form
UPDATE table
SET col1 = ?, col2 = ?,….
WHERE col1 = ? and col2 = ? and….verarbeiten, du weisst aber nicht welche HVs verwendet werden?
MfG Rolf
Bei der Luxusvariante sind alle roten Teile unbekannt.
Bei der [glb]praktikablen Variante [/glb] (wollte hier nur mal glow ausprobieren)
werde ich den dynamischen Teil auf die WHERE Bedingung eingrenzen und somit auch kein Problem mit der Ausprägung (char? dec? o.ä.) der HostVars haben
16. März 2006 um 13:18 Uhr #3956
AnonymInaktivNachtrag zum Append von vorhin:
😀
es gibt noch ein tolles Redbook von der IBM: Squeezing the Most Out of Dynamic SQL with DB2 for z/OS and OS/390.http://www.redbooks.ibm.com/redbooks/pdfs/sg246418.pdf
An diesem Redbook hat unser geschätzer Kollege und Forum-Mitglied Axel Pürner mitgeschrieben. Hätte er Zeit, würde er sich an diesem Thread bestimmt beteiligen. :-/
Ciao
Gernot
-
AuthorPosts
You must be logged in to reply to this topic.