CXU - Installation, Tilpasning og Guide

Her kan du læse alt om, hvordan du installerer, tilpasser og bruger CXU. Du vil støde på udtrykket "CXU-tasten", som refererer til den funktionstast, du vælger at aktivere CXU med. Generelt kvitterer CXU med en ISPF-message i øverste højre hjørne af det aktive panel. Alle ISPF-messages udstedt af CXU har en uddybende beskrivelse tilknyttet, som du får vist ved at trykke på HELP-tasten (normalt F1).

Indholdsfortegnelse:

Installation
Levering
Overførsel
Udpakning
Gen-installation af CXU
Tilpasning
Første gang CXU tages i brug
HELP-funktion til tilpasning
Definition af CXU-tasten
Kopiering til ISPLLIB
Definition af CXU-tasten overalt
Guide
Hvis CXU-tasten ikke virker
Cursoren på: &HELP
Cursoren på: datasetnavn
Cursoren på: datasetnavn(membernavn)
Cursoren på: punktum i datasetnavn eller datasetnavn(membernavn)
Cursoren på: datasetnavn, der indeholder * eller %
Cursoren på: datasetnavn(membernavn), hvor membernavn indeholder * eller %
Cursoren på: kommandonavn
Cursoren på: %kommandonavn
Cursoren på: -kommandonavn
Cursoren på: DB2-tabelnavn
Cursoren på: DB2-tabelnavn med %
Cursoren på: SQL statement keyword
Cursoren på: SQL statement keywords SELECT eller WITH
Cursoren på: alle andre SQL statement keywords (INSERT, UPDATE, DELETE, CREATE, DROP, ...)
Cursoren på: linie-kommando feltet i SQL resultat dannet af CXU
XUNION som afslutning på SQL statement
&parametre generelt
&DB2SYS=ssid
&CREATOR=creator
&EXPLAIN
&EXPLAIN=dataset/member
&BATCH=sysout,job,msg,schenv,steplib,acct
&WIDTH=w1,w2,colname1:wc1,colname2:wc2,,w6 ...
&HIDE=col1,col2,colname1,colname2,col3 ...
&BREAK=col1,col2,colname1,colname2,col3 ...
&HEADER=text
&COLSEP=char
&:hostvariablename=value
&MARGINS=leftmargin,rightmargin
&LEFTCUT=integer
&SEPARATOR=char
&TOLABEL=labelname
&ACCEPT=integer
&LRECL=integer
&SQLID=name
&SYNTAX
&ROLLBACK
&LOCATION=locationname:ssid
&UNLOAD

Installation.
Du kan springe dette kapitel over, hvis du ikke har fået leveret CXU via en mail, og kommandoen TSO CXU virker for dig.

Her beskrives, hvordan CXU leveres, hvordan du får CXU overført til mainframen og hvordan du får udpakket CXU på mainframen. Hvis du har installeret CXU før, så husk at læse om gen-installation af CXU. Hvordan du tilpasser CXU er beskrevet i Tilpasning og hvordan du bruger CXU er beskrevet i Guide.

Levering.
CXU leveres som en download. Download filen skal hedde cxu.xmt og den skal du i første omgang gemme lokalt på din PC. Uanset om det er første gang eller ej, at du har download'et CXU, så skal du udføre overførsel og udpakning på samme måde hver gang.

Overførsel.
Du skal overføre cxu.xmt til mainframen. Det kan gøres på mange forskellige måder afhængig af, hvordan din PC er sat op og hvordan mainframen, din TSO session kører på, er sat op. Det vigtigste er, at:

Hvis du bruger FTP fra en kommando-linie på din PC, så vil følgende kommandoer (efter login til mainframen med dit TSO-brugerid) gennemføre overførslen:

  1. binary
  2. quote ”site blksize=3120 lrecl=80 recfm=FB”
  3. put cxu.xmt cxu.xmt

  4. hint: Hvis datasettet userid.CXU.XMT allerede findes på mainframen og put-kommandoen fejler, så prøv med: put cxu.xmt cxu.xmt (REPLACE

Udpakning.
Filen cxu.xmt er lavet i et såkaldt XMIT-format og det tilsvarende dataset skal udpakkes, før CXU er klar til at blive taget i brug. Du skal udføre TSO-kommandoen RECEIVE INDATASET(CXU.XMT) for at få pakket CXU ud. Når RECEIVE-kommandoen beder dig indtaste parametre, skal du bare trykke Enter. Du har nu fået dannet et dataset, der hedder userid.CXU.LOAD og indeholder fire members kaldet CXU, CXULCNSY, CXULCNSI og CXUPARM.

Nu er CXU klar til at blive taget i brug. Før du går videre er det en god ide at logge af TSO og logge på igen. Hvis du ikke logger af og på igen kan du risikere problemer i det videre forløb indtil du logger af og på.

Gen-installation af CXU.
Hvis du allerede har taget CXU i brug og er i gang med en gen-istallation, så skal du, for at tage den nye udgave i brug, kopiere memberne i userid.CXU.LOAD til det bibliotek, hvor du har gjort CXU tilgængelig fra TSO-session til TSO-session. Det mest normale er, at du har kopieret CXU til et bibliotek på din ISPLLIB-concatenering.
Advarsel: CXU er ikke re-entrant og kan derfor IKKE placeres på link-listen.

Hvis du har gjort CXU tilgængeligt på ISPLLIB, så kan du benytte kommandoen:

TSO CXU &ISPLLIB

til at kopiere den nye version af CXU til ISPLLIB.

Tilpasning.
Her kan du læse om, hvordan du får sat CXU op. Hvis kommandoen TSO CXU virker for dig, selv om du ikke har installeret CXU, så er der andre på din installation, der har gjort CXU tilgængeligt for dig. Du kan i stedet for at skrive TSO CALL CXU(CXU) '...' skrive TSO CXU ... hvilket er en del kortere!
Vigtigt: Enhver TSO CALL CXU(CXU) eller TSO CXU kommando sætter KEYLIST OFF.

Første gang CXU tages i brug.
Hvis du har fulgt vejledningen i installation af CXU og nu er klar til at bruge CXU, så skal du have:

HELP-funktion til tilpasning.
Allerførst er det dog en god ide at stifte bekendskab med HELP til CXU. Prøv derfor kommandoen:

TSO CALL CXU(CXU) '&HELP' (alternativt TSO CXU &HELP)

Den viste HELP varierer efter, hvor langt du er kommet med at tage CXU i brug. HELP er altid på engelsk.

Definition af CXU-tasten.
Du skal nu aktivere ISPF EDIT på et dataset eller member efter eget valg. Når du er klar til at editere data, stiller du cursoren i kommando-feltet og udfører kommandoen:

TSO CALL CXU(CXU) '&Fnn' (alternativt TSO CXU &Fnn)

hvor du erstatter Fnn med nummeret på den funktionstast, du vil aktivere CXU med. Et fornuftigt valg er enten F4 eller F6, da du sandsynligvis sjældent benytter disse funktionstaster i EDIT. Hvis du eksempelvis vil benytte shift-F4, så skal du angive F16.

Nu kan du anvende den valgte funktionstast (CXU-tasten) til at aktivere CXU med. Hvis du på et senere tidspunkt enten i samme TSO-session eller en anden TSO-session oplever, at CXU-tasten ikke fungerer, gentager du kommandoen TSO CALL CXU(CXU).

Kopiering til ISPLLIB.
Du kan slippe for gentagne aktiveringer af CXU-tasten ved at kopiere CXU til et dataset på din ISPLLIB-concatenering. Du skal kopiere alle members i userid.CXU.LOAD, eller du kan vælge at tilføje userid.CXU.LOAD til din ISPLLIB-concatenering.

Det er ikke sikkert, at du har ISPLLIB allokeret. Så må du søge hjælp blandt dine kolleger for at finde ud af, hvordan du får ISPLLIB allokeret. Det er meget forskelligt, hvordan det gøres fra installation til installation. Derfor finder du ikke nogen beskrivelse af dette her.

Definition af CXU-tasten overalt.
Hvis du ønsker at benytte den samme CXU-tast overalt i din TSO-session, så kan du benytte kommandoen:

TSO CALL CXU(CXU) '&Fnn ALL' (alternativt TSO CXU &Fnn ALL)

som aktiverer Fnn som CXU-tasten for alle de ISPF-applikationer, du hidtil har anvendt. Du kan dog stadig komme ud for, at CXU-tasten ikke virker i visse ISPF-applikationer. Det skyldes enten, at det er første gang, at du bruger den pågældende ISPF-applikation, eller at ISPF-applikationen automatisk sætter KEYLIST ON. Brug TSO CALL CXU(CXU) eller TSO CXU for at sætte KEYLIST OFF.

Guide.
Her kan du læse om, hvordan du bruger CXU i dagligdagen. Den overordnede ide med CXU er at stille cursoren på et eller andet i de data, som ISPF EDIT/VIEW viser dig, for derefter at trykke på CXU-tasten for at få et eller andet til at ske. Hvad der sker er afhængig af, hvad du har stillet cursoren på. Den aktion CXU vælger at udføre er alene afhængig af de data, som CXU finder i og omkring cursorens position. Der er ingen skjulte afhængigheder til datasetnavngivning eller lignende. CXU-tasten virker også på linier, der ikke er en del af data, som for eksempel ==MSG> linier.

Hvis CXU-tasten ikke virker og du er sikker på, at den er defineret som beskrevet i Definition af CXU-tasten, så kan du afhjælpe problemet midlertidigt med kommandoen TSO CALL CXU(CXU) som vil gen-aktivere CXU-tasten. Den langsigtede løsning er at foretage en Kopiering til ISPLLIB af CXU.

Alle navne uden undtagelse konverteres internt af CXU til store bogstaver. Det er altså ligegyldigt, om der bruges små eller store bogstaver. Datasetnavne skal som udgangspunkt angives fuldt ud, da CXU ikke bruger TSO prefixing. Der er dog en undtagelse, nemlig hvis tegnet lige foran et datasetnavn er et blanktegn. I dette tilfælde vil CXU først søge efter datasettet som det er angivet, men hvis dette dataset ikke findes, så prefixes datasetnavnet med dit TSO-brugerid og søgningen gentages. Denne mekanisme virker dog kun, hvis det angivne datasetnavn indeholder mindst et punktum.

Du kan styre virkemåden af CXU med såkaldte &parametre. Det er en god ide at placere &parametre i en kommentar, der passer sammen med det øvrige indhold af data. Så er det kun CXU, der reagerer på &parametrene.
Hint: Du kan deaktivere en &parameter ved at fjerne &-tegnet.

I nogen tilfælde udskriver CXU ==MSG> linier. Du får ==MSG> linier til at forsvinde igen enten ved at delete dem eller med EDIT kommandoen RES SPE (RESET SPECIAL). EDIT kommandoen RES (RESET) får også ==MSG> linier til at forsvinde, men den nulstiller også andre ting, som eksempelvis det sidst anvendte søgeord i FIND. Derfor er det en god ide at benytte RES SPE.

Tryk på CXU-tasten, når du har placeret:

Cursoren på: &HELP
Udskriver HELP tekst direkte i data-delen som ==MSG> linier. HELP findes kun på engelsk.

Cursoren på: datasetnavn
Aktionen er afhængig af datasettets type, din adgang til datasettet og om datasettet er HSM-migreret eller ej. Hvis du slet ikke har adgang til datasettet, får du dette at vide. Hvis datasettet er migreret til ML2 (migration level 2, typisk TAPE), så bliver datasettet recallet og du får kontrollen tilbage. Du skal altså ikke vente. Hvis det er migreret til ML1 (typisk DISK), så bliver datasettet recallet, mens du venter.

Hvis du kun har READ-adgang til datasettet, så går CXU i ISPF VIEW (BROWSE, hvis det er et LOAD-bibliotek) på datasettet. Hvis du har mere end READ-adgang til datasettet, så går CXU i ISPF MEMLIST på datasettet, hvis det er et PO-dataset (member-dataset), ellers går CXU i ISPF EDIT. Med ISPF MEMLIST har du udover EDIT, VIEW og BROWSE også adgang til at rename og delete members.

Hvis første qualifier i datasetnavn er &SYSUID., så erstatter CXU &SYSUID. med dit TSO-brugerid.

Hvis datasettet ikke findes og tegnet lige foran datasetnavnet er en blank, så prefixes datasetnavnet med dit TSO-brugerid og CXU prøver igen. Hvis dette dataset heller ikke findes, og det angivne datasetnavn kun indeholder et punktum (to qualifiers), så antager CXU, at navnet er et DB2-tabelnavn i stedet. Se mere under Cursoren på: DB2-tabelnavn. Du kan derfor opleve, at du forventer svaret "dataset not found", men i stedet får "table not found" eller lignende.

Cursoren på: datasetnavn(membernavn)
Virker på samme måde som for datasetnavn, hvor MEMLIST springes over. Hvis memberet er et LOAD-modul, så aktiveres BROWSE automatisk.

Cursoren på: punktum i datasetnavn eller datasetnavn(membernavn).
Aktiverer ISPF DSLIST med datasetnavn. Med ISPF DSLIST har du adgang til at udføre alle de kommandoer, du kender fra ISPF menupunkt 3.4 på datasettet.

Cursoren på: datasetnavn, der indeholder * eller %
Alle de datasets, der matcher det angivne wildcard, vises i ISPF DSLIST. Prefixing med TSO-brugerid deaktiveres, når datasetnavnet indeholder et wildcard.

Cursoren på: datasetnavn(membernavn), hvor membernavn indeholder * eller %
Alle de members, der matcher det angivne wildcard, vises i en memberliste. Hvis du har READ-adgang vises memberlisten med ISPF VIEW (BROWSE, hvis det er et LOAD-bibliotek). Hvis du har mere end READ-adgang vises memberlisten med ISPF MEMLIST, som udover EDIT, VIEW og BROWSE også giver dig adgang til at rename og delete members.

Cursoren på: kommandonavn
Udfører den pågældende kommando. Svarer til en TSO kommandonavn. Som parametre benyttes alle tegn der står efter kommandonavn på samme linie, indtil der er to eller flere blanke efter hinanden på linien.

Cursoren på: %kommandonavn
Udfører en REXX eller CLIST med navnet kommandonavn. Svarer til en TSO %kommandonavn. Som parametre benyttes alle tegn der står efter %kommandonavn på samme linie, indtil der er to eller flere blanke efter hinanden på linien.

Cursoren på: -kommandonavn
Udfører en DB2-kommando med navnet kommandonavn. Som parametre benyttes alle tegn der står efter -kommandonavn på samme linie, indtil der er to eller flere blanke efter hinanden på linien. Resultatet vises direkte i data-delen som ==MSG> linier. Hvis kommandonavn er lig DISPLAY, vises resultatet i en ISPF VIEW-session.
Hint: Brug DIS som kommandonavn, hvis du vil vise resultatet som ==MSG> linier. Meget store resultater vil dog altid blive vist i en ISPF VIEW-session.

Er der mere end et aktivt DB2-system tilgængeligt, vil CXU søge baglæns fra -kommandonavn efter teksten &DB2SYS= og bruge de fire første tegn angivet efter &DB2SYS= som DB2-system. Hvis teksten &DB2SYS= ikke findes, vil CXU danne en liste over de tilgængelige DB2-systemer som ==MSG> linier og bede dig om at vælge een af dem med ISPF linie-kommandoen MD. Når du har gjort det, bruger du CXU-tasten igen på -kommandonavn.

Cursoren på: DB2-tabelnavn
Udskriver index-oversigt og kolonne-information direkte i data-delen som ==MSG> linier.

For hvert index udskrives index-typen (PRIMARY,UNIQUE eller DUPLICATE) og navnene på de kolonner, som indexet er opbygget af. Kun navnene på de ti første kolonner i indexet vises. Hvis alle kolonnenavnene ikke kan vises på samme linie, bruges kolonnernes numre i stedet. Kun kolonnenumrene på de tolv første kolonner i indexet vises.

For hver kolonne udskrives navnet, kolonnenummeret, typen og længden. Efter længden udskrives teksten NULL, hvis kolonnen kan indeholde null-værdier.

Finder CXU ikke et aktivt DB2-system, så vil CXU opfatte tabelnavnet som en kommando, hvis tabelnavnet er angivet uden creator, og som et datasetnavn, hvis det er angivet med creator. Hvis cursoren står på punktummet mellem creator og name, vil CXU fortolke navnet som et datasetnavn.

Er der mere end et aktivt DB2-system tilgængeligt, vil CXU søge baglæns fra tabelnavnet efter teksten &DB2SYS= og bruge de fire første tegn angivet efter &DB2SYS= som DB2-system. Hvis teksten &DB2SYS= ikke findes, vil CXU danne en liste over de tilgængelige DB2-systemer som ==MSG> linier og bede dig om at vælge een af dem med ISPF linie-kommandoen MD. Når du har gjort det, bruger du CXU-tasten igen på tabelnavnet.

Er tabelnavnet angivet uden creator, vil CXU søge baglæns fra tabelnavnet efter teksten &CREATOR= og bruge navnet angivet efter &CREATOR= som creator. Hvis &CREATOR= ikke findes, så vil CXU bruge dit TSO-brugerid som creator.

Er der navnesammefald mellem et tabelnavn og et datasetnavn eller en kommando, så vil datasetnavnet eller kommandoen blive benyttet. Du kan tvinge CXU til at fortolke navnet som et tabelnavn ved at indtaste et komma (,) lige foran navnet uden blanke imellem.

Cursoren på: DB2-tabelnavn med %
Alle de DB2-tabeller, der matcher det angivne wildcard, udskrives direkte i data-delen som ==MSG> linier. For hver tabel udskrives tabelnavnet (som creator.tabelnavn) og tabel-typen. CXU sætter DB2-system og creator efter samme regler som for DB2-tabelnavn.
Hint: Du kan placere cursoren på et tabelnavn i en ==MSG> linie og trykke på CXU-tasten. Så får du vist kolonnerne i tabellen.

Cursoren på: SQL statement keyword
SQL statementet eksekveres, med start i linien med det valgte SQL statement keyword. Som afslutning på SQL statementet reagerer CXU på /* eller // i position 1, semikolon (;), END-EXEC, ENDEXEC eller "Bottom of data". Data i kommentarer ignoreres. Som kommentar kan anvendes -- som i SPUFI og QMF, /* til */ som i PLI, * i position 1 som i ASSEMBLER og * i position 7 som i COBOL.

Alle tegn fra position 1 til det den maksimale længde på en linie i data medtages i SQL statementet. CXU fjerner automatisk overflødige blanktegn. Den endelige maksimale længde af et SQL statement er 32760 bytes.

Cursoren på: SQL statement keywords SELECT eller WITH
Resultatet af eksekveringen af SQL statementet vises i en ISPF VIEW-session. Resultatet er samtidig blevet gemt i et dataset med navnet userid.CXUSQL01.ONLOUTnn, hvor nn er et tal, der gør datasetnavnet entydigt, hvis du kører flere CXU sessioner samtidigt. Datasettet overskrives af CXU ved næste eksekvering af en SELECT eller WITH.

Størrelsen af datasettet bliver automatisk begrænset af CXU. ISPF message "Dataset ran out of space" vises, når dette sker. CXU begrænser altså ikke på antallet af rækker, men på størrelsen af resultatet. Færre og korte kolonner gør, at du kan se flere rækker. Du kan omgå denne begrænsning ved at sende SQL statementet til batch-eksekvering med &BATCH-parameteren. Når en SELECT eller WITH udføres i batch af CXU er det kun disk-pladsen, der er til rådighed, der sætter grænserne for størrelsen af resultatet.

INTO delen af en singleton SELECT bliver ignoreret. Dette gør dig i stand til at eksekvere SELECT ... INTO ... FROM ...SQL statements direkte fra programsource uden først at skulle fjerne INTO delen.

Cursoren på: alle andre SQL statement keywords (INSERT, UPDATE, DELETE, CREATE, DROP, ...)
Resultatet af eksekveringen af SQL statementet vises som ==MSG> linier.

Cursoren på: linie-kommando feltet i SQL resultat dannet af CXU
Rækken i SQL resultatet vises i en ny ISPF VIEW-session. Hver kolonne i rækken vises på sin egen linie med kolonne-navnet som ledetekst. Hvis der er mere end 70 tegn i kolonnen vises de første 70 tegn på den første linie efter ledeteksten, de næste 70 tegn på den anden linie efter ledeteksten og så fremdeles.

XUNION som afslutning på SQL statement
Du kan concatenere resultatet af to eller flere på hinanden følgende SQL SELECT eller WITH statements sammen i et fælles dataset ved at adskille de enkelte statements med teksten XUNION i stedet for at anvende semikolon. Headeren genereres kun for det første statement og der foretages ingen validering af, om resultatet af de efterfølgende statements matcher kolonnerne i det første statement. &parametre, der påvirker formateringen af resultatet, skal angives inden den første XUNION, da de ignoreres i de efterfølgende statements.

Det er muligt at anvende forskellige værdier af &parametrene &DB2SYS, &LOCATION og &CREATOR i hvert statement adskilt med XUNION. Hermed får du mulighed for at lave en union, der næsten svarer til UNION i SQL mod forskellige DB2-systemer og/eller locations, hvad der ikke er muligt i samme SQL statement i DB2.

&parametre generelt
Du kan styre afviklingen af SQL statements med forskellige &parametre. CXU leder efter parametre i alle kommentarer i linierne fra og med den linie, hvor cursoren står i, når du trykker på CXU-tasten, til og med den linie, hvor CXU finder afslutningen af SQL statementet. Du kan angive flere parametre på samme linie, da en &parameter afsluttes af det første blank-tegn (bortset fra &HEADER-parameteren). Du har følgende &parametre til din rådighed:

&DB2SYS=ssid
SQL statementet afvikles af DB2-systemet med navnet ssid. DB2-systemet skal være aktivt på det MVS-system, hvor du er logget på TSO. Hvis der kun er et aktivt DB2-system på MVS-systemet, behøver du ikke at bruge denne parameter. DB2 group attach name kan anvendes som ssid.

&CREATOR=creatorname
Hvis nogen af tabellerne i SQL statementet er specificeret uden creator (typisk i statisk SQL), så anvender CXU creatorname som creator ved eksekveringen af SQL statementet. Denne parameter er især nyttig at bruge til at udføre SQL statements direkte fra program-source.

&EXPLAIN
I stedet for at eksekvere SQL statementet, vil CXU foretage en EXPLAIN af SQL statementet og præsentere resultatet i en VIEW-session. Når denne parameter benyttes, så vil eventuelle hostvariable blive erstattet med såkaldte parameter markers og INTO delen af en singleton SELECT vil blive ignoreret. &EXPLAIN er altså særdeles nyttig at bruge direkte fra program-source, da det på en nem måde kan give dig værdifuld information om, hvordan DB2 vil eksekvere dit SQL statement.

&EXPLAIN virker kun, hvis du har oprettet din egen PLAN_TABLE-tabel. Hvis du ikke har en PLAN_TABLE, så må du søge hjælp blandt dine kolleger for at finde ud af, hvordan du får oprettet en PLAN_TABLE. Det er meget forskelligt, hvordan det gøres fra installation til installation. Derfor finder du ikke nogen beskrivelse af dette her. Husk, at du skal have en PLAN_TABLE pr. DB2-system, du anvender CXU på.

Resultatet af en &EXPLAIN er sammensat af kolonner fra PLAN_TABLE på følgende måde:


SQL
Svarer til kolonnen QBLOCK_TYPE
QB
Svarer til kolonnen QBLOCKNO
PNO
Svarer til kolonnen PLANNO
M
Svarer til kolonnen METHOD
AC
Svarer til kolonnen ACCESSTYPE
MC
Svarer til kolonnen MATCHCOLS
XO
Svarer til kolonnen INDEXONLY
PF
Svarer til kolonnen PREFETCH
J
Svarer til kolonnen JOIN_TYPE
CF
Svarer til kolonnen COLUMN_FN_EVAL
SORTINFO
Består af en sammensætning af kolonnerne SORTN_UNIQ, SORTN_JOIN, SORTN_ORDERBY, SORTN_GROUPBY, SORTC_UNIQ, SORTC_JOIN, SORTC_ORDERBY og SORTC_GROUPBY i den angivne rækkefølge. Dog er værdien N erstattet med - for at gøre det lettere at se, når en af kolonnerne er Y.
TABLE
Svarer til kolonnen TNAME
INDEX
Svarer til kolonnen ACCESSNAME

&EXPLAIN=dataset/member
Denne parameter fungerer på præcis samme måde som &EXPLAIN, men resultatet i VIEW-sessionen vil blive formateret i overensstemmelse med den SELECT-liste, der er angivet i dataset/member. På denne måde kan du lave din egen formatering af EXPLAIN-resultatet. Du kan enten angive et datasetnavn eller et datasetnavn(membernavn) afhængig af, hvilken type dataset, du placerer SELECT-listen i.

I dataset/member kan du bruge * i position 1 som kommentar. Kun &WIDTH-parameteren kan anvendes. Der må ikke være nogen FROM og alle kolonnerne i SELECT-listen skal eksistere i din PLAN_TABLE.

&BATCH=sysout,job,msg,schenv,steplib,acct
Med denne parameter vil SQL statementet blive sendt til eksekvering af et batchjob genereret af CXU. Ingen af sub-parametrene er krævet og parameter-listen følger syntaks-reglerne for parameter-lister i JCL.


sysout
Den sysout-klasse (SYSOUT=sysout) et eventuelt resultat af en SELECT eller WITH skal udskrives til. Hvis du udelader denne parameter, så udskrives resultatet i et dataset med navnet userid.CXUSQL01.jobname, hvor jobname er dit TSO-brugerid efterfulgt af et bogstav eller tal genereret af CXU. Datasettet oprettes som et multi-volume dataset og bør derfor kunne rumme selv meget store resultater.
job
Den job-klasse (CLASS=job) jobbet skal afvikles i. Udelades denne parameter benyttes JES default job-klassen. Denne job-klasse kan være deaktiveret, så dit job slet ikke kommer ud at køre.
msg
Den msg-klasse (MSGCLASS=msg) jobbets output gemmes i. Udelades denne parameter benyttes JES default msg-klassen. Denne msg-klasse kan være deaktiveret, så du ikke kan se dit job-output.
schenv
Navnet på det scheduling environment (SCHENV=schenv) jobbet skal afvikles i. Udelades denne parameter afvikles jobbet på samme MVS-system, som din TSO-session er logget på.
steplib
Navnet på et LOAD-bibliotek, som concateneres til jobbets STEPLIB. På nogen installationer er DB2 LOAD-biblioteket ikke en del af den normale STEPLIB/JOBLIB/LINKLIST concatenering, som MVS søger efter programmer i. Det er i dette tilfælde, at du kan anvende denne parameter. Spørg en kollega, hvad DB2 LOAD-biblioteket hedder, hvis du ikke selv ved det, og du har brug for det for at få jobbet til at køre.
acct
De job-accounting informationer, som jobbet skal afvikles med. Job-accounting er den første parameter efter JOB på job-kortet. Den kan normalt udelades, men hvis din installation kræver job-accounting informationer for at dit job kan køre, er det her, du angiver dem.

&WIDTH=w1,w2,colname1:wc1,colname2:wc2,,w6 ...
Det kan nogen gange være praktisk at ændre bredden af udvalgte kolonner i resultatet. w1 er den ønskede bredde på den første kolonne i resultatet. w2 er den ønskede bredde på den anden kolonne i resultatet. w6 er den ønskede bredde på den sjette kolonne i resultatet. Du kan bruge kommaer til at adskille de forskellige kolonnebredder fra hinanden. Det er muligt at have flere &WIDTH-parametre. I så fald er det specifikationerne i den sidste parameter, der gælder ved sammenfald.

Nu er det ikke altid lige let at regne sig frem til en kolonnes placering i resultatet. Derfor kan du også angive et navn på en kolonne efterfulgt af et kolon efterfulgt af den ønskede bredde. Eksempelvis er colname1 navnet på den kolonne, der skal have bredden wc1 og colname2 er navnet på den kolonne, der skal have bredden wc2. Du skal bruge det navn, kolonnen vil få som overskrift, ellers virker det ikke. Hvis to eller flere kolonner har den samme overskrift, får de samme bredde.

Kolonner, der har fået en mindre bredde end default, vil i resultatet være markeret med lighedstegn (=) under kolonnenavnet i stedet for bindestreger (-). Hvis du ønsker at ignorere denne markering for en kolonne, der bliver afkortet, så skal du indtaste et minus (-) foran kolonnebredden i &WIDTH.

Kolonner med en eller anden LOB-type vil CXU default vise i en bredde på 256 tegn. Hvis du ønsker at vise en LOB-kolonne i en anden bredde skal du angive den ønskede bredde med &WIDTH.

&HIDE=col1,col2,colname1,colname2,col3 ...
Det er muligt at fjerne kolonner fra resultatet. col1, col2 og col3 er numre på kolonner i SELECT-listen, der ikke skal vises i resultatet. Hvis col1 er 2, så vil den anden kolonne i SELECT-listen ikke blive vist i resultatet. Du kan bruge kommaer til at adskille de forskellige kolonnenumre fra hinanden. Det er muligt at have flere &HIDE-parametre.

Nu er det ikke altid lige let at regne sig frem til en kolonnes nummer i resultatet. Derfor kan du også angive navnet på en kolonne. Eksempelvis er colname1 navnet på en kolonne, der skal skjules og colname2 navnet på en anden kolonne, der skal skjules. Du skal bruge det navn, kolonnen vil få som overskrift, ellers virker det ikke. Hvis to eller flere kolonner har den samme overskrift, fjernes de allesammen.

&BREAK=col1,col2,colname1,colname2,col3 ...
For at gøre resultatet mere læsbart, kan der indsættes breaks. Hvis to eller flere på hinanden følgende rækker har samme værdi i en kolonne med break, vises værdien kun i den første række. Værdien vises dog også, hvis værdien vises i en kolonne nævnt før den aktuelle kolonne i &BREAK-parameteren. col1 er nummeret på den første kolonne i resultatet, der laves break på, col2 er nummeret på den anden kolonne, der laves break på, og col3 er nummeret på den femte kolonne, der laves break på. Du kan bruge kommaer til at adskille de forskellige kolonnenumre fra hinanden.

Nu er det ikke altid lige let at regne sig frem til en kolonnes nummer i resultatet. Derfor kan du også angive navnet på en kolonne. Eksempelvis er colname1 navnet på den tredie kolonne, der skal laves break på og colname2 navnet på den fjerde kolonne, der skal laves break på. Du skal bruge det navn, kolonnen vil få som overskrift, ellers virker det ikke. Hvis to eller flere kolonner har den samme overskrift, er det den første i resultatet, der laves break på.

&HEADER=text
De to normale header-linier i resultatet af en SELECT eller WITH erstattes med den angivne text. Hvis text udelades, så fjernes de to header-linier og kun rækkerne udskrives i resultatet. Som text bruges resten af linien uanset om den indeholder blanke eller &parametre. Hvis linien indeholder en slut-kommentar (*/) og kommentaren blev startet med /*, så slutter text her. &parametre i text ignoreres under scanningen af SQL statementet.

Det er muligt at udvide text i &HEADER ved at angive flere &HEADER=text i hver sin kommentar. Teksten angivet i de efterfølgende &HEADER-parametre efterstilles teksten fra de foregående. Vær opmærksom på, at efterstillede blanke indgår i text.

&:hostvariablename=value
Definerer en variabel med navnet hostvariablename, og tildeler den værdien value. Hvis teksten :hostvariablename optræder i selve SQL statementet efter definitionen af variablen, så vil CXU erstatte teksten med værdien angivet i value. På denne måde er det muligt at eksekvere SQL statements indeholdende hostvariable direkte fra programsourcen uden at rette i selve SQL statementet. I hostvariablename er alle bogstaver, tal og tegnene kolon (:), punktum (.), bindestreg (-) og underscore (_) tilladt. Der skelnes ikke mellem store og små bogstaver.

Husk at angive apstroffer (') rundt om value, hvis en hostvariabel skal erstattes med en tekststreng. Eksempel: &:myhostvar='thisIsMyString'. Hvis den afsluttende apostrof mangler, så vil value indeholde resten af linien. Dette gælder dog ikke, hvis variablen defineres i en /*-kommentar. Her vil value fortsætte indtil der optræder en apostrof i data, så husk at sætte den afsluttende apostrof i /*-kommentarer. Hvis value skal indeholde en apostrof, så angiver du to apostroffer efter hinanden.

I forbindelse med &EXPLAIN vil alle hostvariable, der er tildelt en værdi med &:hostvariablename=value blive erstatttet med den angivne værdi, mens øvrige hostvariable erstattes med en parameter marker før eksekvering. Der kan derfor være forskel på accessvejen afhængig af, om der er angivet en værdi til en hostvariabel eller ej.

&COLSEP=char
Tegnet char indsættes som skilletegn mellem hver kolonne i hver eneste række.

&MARGINS=leftmargin,rightmargin
Kun tegnene fra og med position leftmargin til og med position rightmargin indgår i SQL statementet inklusive tilhørende kommentarer. Leftmargin og rightmargin træder først i kraft for linierne efter den linie, som &MARGINS optræder i.

&LEFTCUT=integer
Alle linier i resultatet rykkes integer antal tegn til venstre.

&SEPARATOR=char
Det normale afslutningstegn semikolon (;) udskiftes med char. Kun det første tegn i char anvendes. &SEPARATOR bruges til at få udført SQL statements, hvor semikolon indgår som en del af syntaksen som eksempelvis i CREATE TRIGGER.

&TOLABEL=labelname
I stedet for at stoppe scanningen af SQL ved afslutningen af det aktuelle SQL statement, så stopper scanningen ved den linie i data, der har fået tildelt labelen labelname. En label defineres med et foranstillet punktum. Det er valgfrit at angive punktummet i labelname. Hvis labelname ikke findes eller labelname er angivet før den linie, som &TOLABEL-parameteren er angivet i, så ignoreres parameteren. &TOLABEL-parameteren ignoreres også, hvis den optræder i et senere SQL statement end det først eksekverede.

Data mellem det aktuelle SQL statement og den linie, der indeholder labelname fortolkes som et antal SQL statements adskilt af semikolon (;), END-EXEC eller ENDEXEC. Hvis et SQL statement fejler (returnerer en negativ sqlcode), så stoppes scanningen og der foretages ROLLBACK af de hidtil eksekverede SQL statements. Hvis alle SQL statements udføres uden fejl, så foretages der COMMIT af alle de eksekverede SQL statements. Hvis &DB2SYS-parameteren skifter værdi i et efterfølgende SQL statement, så foretages der COMMIT af alle de hidtil eksekverede SQL statements og eksekveringen fortsætter herefter mod det nye DB2-system.

Hvis de eksekverede SQL statements er SELECT eller WITH, så gemmes resultatet af hvert SQL statement i hver sit dataset med navnet userid.CXUSQLnn.ONLOUTxx, hvor nn er lig 01 for det først eksekverede SQL-statement, 02 for det andet og så fremdeles. Resultatet af det sidst eksekvede SQL-statement vises i en VIEW-session. Udføres SELECT eller WITH i batch gemmes resultatet i hver sit dataset med navnet userid.CXUSQLnn.jobname.

Hint: Ved at angive &TOLABEL=ZL vil det aktuelle SQL statement og alle efterfølgende SQL statements i data blive eksekveret. Du behøver altså ikke at markere den sidste linie i data med en label, da EDIT/VIEW altid har tildelt sidste linie labelnavnet ZL.

Når flere SQL statements eksekveres på en gang ved hjælp af &TOLABEL vil den senest satte værdi af følgende parametre overleve fra det forrige SQL statement:


&DB2SYS, &CREATOR, &COLSEP, &SEPARATOR, &ACCEPT, &SQLID, &LOCATION, &:hostvariablename, &MARGINS

og værdien af parameteren &BATCH i det første SQL statement vil blive anvendt for alle efterfølgende SQL statements. Alle SQL statements sendt til batch afvikling på denne måde eksekveres i samme batchjob.

&ACCEPT=integer
Hvis sqlcode for det aktuelle SQL statement returnerer værdien integer, betragtes SQL statementet som korrekt udført. &ACCEPT kan med fordel anvendes sammen med &TOLABEL, da det giver mulighed for at få udført COMMIT af mange statements, selv om et enkelt eller flere SQL statements skulle fejle undervejs.

Et eksempel på brugen af &ACCEPT er &ACCEPT=-803 ved eksekveringen af en række inserts. Hvis en eller flere af de inserts, der eksekveres, fejler med -803, så vil de øvrige inserts alligevel blive udført og CXU vil slutte af med en COMMIT.

&LRECL=integer
Resultatet af en SELECT eller WITH gemmes i et dataset med LRECL=integer uanset resultatets oprindelige bredde.

Hvis to eller flere på hinanden følgende SELECT eller WITH statements indeholder præcis samme &LRECL-parameter og udføres ved hjælp af &TOLABEL, så vil resultaterne blive gemt i samme dataset. Det er med andre ord muligt at lave UNION mellem to forskellige DB2-systemer ved at kombinere &DB2SYS, &TOLABEL og &LRECL.
Hint: Det er endnu lettere at opnå samme resultat ved at benytte XUNION. Med XUNION slipper du for at skulle angive &LRECL og &TOLABEL.

&SQLID=name
SQL statementet udføres med det SQLID, der er angivet med name.

&SYNTAX
I stedet for at eksekvere SQL statementet udføres der kun en syntakskontrol. Denne parameter er god at bruge, hvis du for eksempel er ved at skrive et SQL statement, der kan tage lang tid at udføre, men som du lige vil have kodet rigtig først, uden at det udføres.

&ROLLBACK
Efter endt eksekvering af SQL statementet udføres der en ROLLBACK. Denne parameter kan anvendes til at afprøve SQL updates med, hvor man ikke ønsker at gemme resultatet. Pas på med at bruge denne parameter i et SQL statement, der opdaterer mange rækker, da de rent faktisk opdateres for derefter at blive rullet tilbage. Overvej i stedet a bruge &SYNTAX.

&LOCATION=locationname:ssid
SQL statementet udføres på det databasesystem, der kendes under navnet locationname af det aktuelle DB2-system. Det er frivilligt at angive et kolon (:) efterfulgt af ssid efter locationname. Hvis :ssid angives, betyder det, at SQL-statementet kun udføres på locationname, hvis ssid er lig navnet på det aktuelle DB2-system (måske angivet med &DB2SYS-parameteren).

&UNLOAD
I stedet for at formatere hver enkelt række til læsbart format, så gemmes resultatet uformateret. De to normale header-linier udelades. Med denne parameter danner CXU samme outputformat som DSNTIAUL gør. Når &UNLOAD benyttes, ignoreres &LRECL-parameteren. Ligeledes ignoreres alle andre &parametre, der formaterer resultatet.