MainframeSupports
tip uge 17/2004:

Jeg har ofte stået i den situation, at jeg vha. et SQL-kald genererede en masse nye SQL-kald, som jeg så har udført med SPUFI eller DSNTIAD eller lignende. Mit problem med denne metode har altid været, at SQL-kald hurtigt bliver mere end 80 tegn lange og i SPUFI må hver enkelt linie kun være 72 tegn lang. Jeg har derfor længe ledt med lys og lygte efter en smart og enkel måde at splitte et SQL-kald op på. Jeg har nu fundet en løsning med SORT.

OUTFIL OUTREC= kommandoen i SORT kan lidt af hvert (se f.eks.tip uge 24/2000) og den kan faktisk også opsplitte en record i flere records. Det gøres på følgende måde:

//MYSPLIT  EXEC PGM=SORT
//SORTIN   DD DISP=SHR,DSN=MY.ORIGINAL.DATA
//SORTOUT  DD DISP=SHR,DSN=MY.SPLITTED.DATA
//SYSOUT   DD SYSOUT=*
//SYSIN    DD *
  SORT FIELDS=COPY
  OUTFIL OUTREC=(1,72,8X
  /,73,72,8X,
  /,145,72,8X)
/*

Ovenstående eksempel kræver, at datasettet MY.ORIGINAL.DATA har en LRECL på mindst 271 for at virke. Dataset MY.SPLITTED.DATA skal have LRECL=80 og begge dataset skal have RECFM=FB. Hvis MY.ORIGINAL.DATA for eksempel indeholder en masse SQL-kald med et SQL-kald pr. record, hvor hvert SQL-kald er mere end 145 tegn langt, så vil datasettet MY.SPLITTET.DATA efter eksekvering af ovenstående step indeholde de samme SQL-kald, men nu splittet op på tre linier og lige klar til at blive eksekveret med SPUFI. En af de underlige detaljer ved SPUFI er, at input records til SPUFI concateneres (godt dansk ord!?) uden nogen form for fortolkning, så derfor behøver man ikke bekymre sig over om man splitter lige midt i et kolonnenavn eksempelvis.

Da det først gik op for mig, at man kan splitte linier med SORT, så kom der for alvor skred i tingene for mig. Jeg bruger nu ofte SORT til at generere alt muligt. Forestil dig eksempelvis, at input er en liste af datasetnavne, som du gerne vil oprette. Normalt vil du nok skrue det sammen i et IEFBR14 jobstep, som du håndkoder, eller måske lave noget ISPF file tailoring, men det er faktisk uhyre let at erstatte med ovennævnte metode. Når først ideen har bundfældet sig, så er der rigtig mange muligheder i den simple / i OUTFIL OUTREC= kommandoen. Til sidst må jeg hellere lige nævne, at / ikke kan bruges i OUTREC FIELDS= kommandoen endnu.

Forrige danske tip        Last tip in english        Tip oversigten