STEM Variablen an externe procedure übergeben
- Dieses Thema hat 1 Antwort und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 17 Jahre von
Anonym.
-
AuthorPosts
-
28. August 2006 um 12:45 Uhr #2720
AnonymGasthallo zusammen
habe da ein problem welches mich schon seit zwei wochen beschäftigt.zum problem:
ich versuche seit fast zwei wochen STEM. variablen in eine externe prozedur zu übergeben.
zum programm: es wird ein sql statement an eine externe prozedur übermittelt. in dieser prozedur wird die sql abfrage verarbeitet und in eine stem. variable gespeicher. will ich diese stem. wieder an die hauptprozedur zurücksenden, funktioniert das nicht.unser system: zSeries 990, z/os mit db2
meine versuche:
"EXECIO * DISKW SYSQUEUE (STEM sqlresult1. FINIS)"
auf der SQL ausführenden seite.und
"ALLOC DD(SYSQUEUE) NEW REUSE UNIT(VIO)",
"LRECL(255) RECFM(V B) SPACE(30)TRACKS"
.
.
.
"EXECIO * DISKR SYSQUEUE (STEM sqlresult1. FINIS)"
auf der empfangenden seite.das ist auch alles ganz toll; leider bekomme ich von den verarbeiteten 21 sätzen(mit jeweils 7 Sätzen) immer nur den letzten ausgegeben.
dies ist ein satz aus der sql abfrage (also 7 spalten)
DKBVAOE1
SAOA000
TAOA000
XAOA0001
BVE1
-1
57
diese ausgabe sollte für alle verarbeiteten werte angezeigt werden.vielleicht kann mir ja hier jemand helfen und mir einen tipp geben wie ich diese stem. übergeben kann
gruß thomas
28. August 2006 um 20:15 Uhr #3115
AnonymInaktivHallo Thomas,
Du kannst externen Prozeduren keinen Stem überreichen, aber es gibt andere Möglichkeiten. Anbei ein Beispiel:
[hr]
*REXX – StackA: Daten auf Queue legen */
parse source op_sys . exec_name .
/* Schreiben in LIFO Methode */
push "A1"
push "A2"
push "A3"
/* Schreiben in FIFO Methode */
queue "A4"
queue "A5"
queue "A6"
records = queued()
say "Unter "op_sys" in Procedure "exec_name records,
"Record in die Queue gestellt."
call StackB
records = queued()
say "Reste in der Queue: "records" Records."
exit
[hr]
/*REXX – StackB: Daten aus Queue nehmen */
parse source op_sys . exec_name .
records = queued()
say "Unter "op_sys" in Procedure "exec_name records,
"Records aus der Queue nehmen."
drop stem.
do i=1 to records
pull record
say i". Record="record
stem.i = record
end
call iStackC (i-1)
exit 0
/*–*/
iStackC: Procedure expose stem.
parse arg records
say "Unter "op_sys" in Procedure "exec_name "(iStackC)" records,
"Records aus Stem nehmen."
do i=1 to records
say i". Record="stem.i
end
return
[hr]
Mit PUSH bzw QUEUE kannst Du in der LIFO- oder FIFO-Methode auf einen Stack schreiben, mit PULL vom Stack lesen.Die Übergabe eines Stems funktioniert nur innerhalb der Prozedur zu einer internen Prozedur, die via EXPOSE die Variablen mit ihrer Umgebung teilt.
Viel Erfolg
Gernot -
AuthorPosts
You must be logged in to reply to this topic.