wsh ist eine Rexx Erweiterung die eine SkriptSprache für
- Erstellen von Parameterfiles und JCLs
- SQL Abfragen
- adhoc Programmierung
Tutorial
- tutorials in {RZ4+DSN.BEISPIEL.WSH}
- tut00
- Sekelton mit Variabeln Expansion
- wsh Klauseln sind durch $ markiert
- dadurch werden rexx, skeletons mit der wsh-runtime Umgebung verwoben
- VariablenNamen und alle wsh Konstrukte sind case sensitiv
- assignmen mit $= ... = ...
- tut01
- Kommentare mit $* oder $*( .... $*)
- da fehlt JobHeader, aus dsnMember reinholen
- ouput in dsnMember: output umleiten, abgrenzen mit $<>
- output besser gleich submitten: umleiten auf .fSub()
- kombinieren mit rexx: String Expressions: bei sysvar
- oder statements: if .... full yes
- tut02
- mit Rexx erweitern um mehrere Jobs zu starten: rexx do (mit syntactical sugar $do)
- jx mit RexxExpression ausrechnen
- blockKonstrukt $@[ ... $] (mit Varianten) ==> beliebige Schachtelung
- tut03
- statt einfach hochzählen eine InputListe verwenden
$!
Pipe Operator: output der linken Seite wird auf Input der rechten Seite geleitet: Verknüpfung von StandardOutput und -Input- $@. führt einen RexxAusdruck aus.
- der Rexxausdruck ergibt ein Objekt, das standard input liest, und jede Zeile in ein Objekt umwandelt, die erste Zeile enthält die KolonnenNamen db und ts
$! call fTabAuto
: formatiert als Tabelle$! $for o $$ o=$o ts=${o&ts}
: loop ueber Objekte$! $forWith o $$ o=$o "$db.$ts"
: loop+with ueber Objekte- ganzes Script: Skeleton für jedes Objekt
$<intRdr
zum direkt submitten
- tut04
- die Liste holen können wir auch mit SQL aus dem DB2 Catalog holen
- Input ist SQL (wie bekannt als Skeleton mit Variabeln Expansion) auf Prozedur sqlSel gePipet
- sqlSel gibt resultat rows als Objekte zurück (mit fmtFTab ohne fetch first zeigen)
*** run error *** undefined var ts
: sql übersetzt die Namen auf uppercase, darum müssen wir unsere Namen auf DB und TS umsetzen
- tut05
- jetzt bauen wir ein Tool, um Copies durchzuführen
- wir verwende die wsh kind :, im Gegensatz zu @ erlaubt sie kein Rexx (direct), dafür können wir die moisten $ weglassen
- für den Input definieren wir eine Liste von TSs, damit wir die DB nicht jedesmal schreiben müssen verwenden wir csvColRdr und ersetzt leere DBs durch die letzte hingeschriebene
- im Loop schreiben wir include db.ts
- vor dem ersten include einer neuen DB noch einen eigenen Step
- und noch vorher (und am Ende) das Ende des letzten Steps
- dazu verwenden wir die prozedur stepFinish
- in den Assignments brauchen wir kleine Rexx Fragmente
- tut06
- hierhin kopieren wir nur die Logik von tut05
- tut07
- und hier schreiben wir nur noch den InputTeil von Tut05
- am Schluss kompilieren wir tut06 und führen es aus
- so haben wir die Tool Logik ausgelagert
- tut08
- statt mit einer Input Tabelle können wir das Tool auch mit Prozeduren bauen. Mit Kind % brauchen wir nur Prozedurnamen hinzuschreiben
- proc db setzt die DefaultDb
- proc ts ruft dbTS mit der DefaultDb auf
- proc dbTs macht die Arbeit
- falls nötig letzten Step beenden, Jobheader und Step Anfang schreiben
- das include für die listDef lTs auf stdOutput schreiben
- das include für die listDef lPa in den Buffer $lPa schreiben
- proc job schreit kopiert den JobHeader aus einem DSN und macht ein paar Initialisierungen
- proc step öffnet den Buffer $lPa für Output schreibt das Jcl für einen UtilityStep und die ersten UtilityStatements
- proc finish kopiert das zweite listDef aus Buffer $lPa in stdOutput und ruft die proc für die gewünschten Utilities. Diese wurden oben im Member in die Variable $util geüllt. Das funktioniert, weil Prozeduren gleich wie Variabeln in den VariabelnPool gefüllt werden.
- proc copy (und die anderen Utility Funktionen) schreibt den entsprechende Utility mit der richtigen ListDef nach stdOutput
- tut09
- Hier haben wir nur den DatenTeil aus tut08 kopiert. Die Prozeduren erhalten wird, indem wir das tut08 zur compileZeit compilieren
- tut10
- sqlSel schreibt den Output eines SQLs als Objekte in Output
- sqlStmts funktioniert wie SPUFI
- aber wir können das jetzt zusammenhängen!
- tut11
- wenn wir einen Vorspann und Nachspann einbauen wollen, können wir $proc verwenden, oder es direkt einbauen
- mit wsh kind = (statt @) können wir output direct reinschreiben, dafür müssen rexxTeile mit $@ markiert werden
- tut12
- man kann sämglich eingebaute rexx benutzen
- z.B. dsnList (==> stem)
- tso commands definieren
- falls nötig mit rexx erweitern
- auch für CSM gibt es eine Prozedur
weiteres
- Interfaces
- Konzepte in WshSem
character set problems
wiki | z/os | name |
---|---|---|
¢! | [] | square brackets |
| | ! | exclamation mark |
- {RZ4+a540769.wk.rexx(charset)}