Удалить набор данных &&TEMP в JCL

У меня есть следующий JCL:

//REGTEST3 JOB 00000000,'REG COPY CDB  ',MSGLEVEL=(1,1),
//             NOTIFY=&SYSUID,CLASS=I,MSGCLASS=X,REGION=1200M
/*JOBPARM S=ESYS
//PROCLIB JCLLIB ORDER=PWSX.KAMSP2T.PROCLIB
//****************************************************************
//*****    SETUP TEST RAPW, RAP2, RAXY, RASV IMS DATABASES
//****************************************************************
//RENAME   EXEC FINDREP,FIND=KAMSP2T,REPLACE=&SYSUID,
//         OUTFILE=&&TEMP01
//SORTUSER.SORTIN DD *

  DELETE KAMSP2T.#TEST2.RAPW0RDS PURGE
  DELETE KAMSP2T.#TEST2.RAPW1RDW PURGE
  DELETE KAMSP2T.#TEST2.RAPW2RDS PURGE
  DELETE KAMSP2T.#TEST2.RAXY0RDA PURGE
  DELETE KAMSP2T.#TEST2.RASV0RDA PURGE
/*
//DEL01   EXEC PGM=IEFBR14
//DELDD    DD DSN=&&TEMP01,
//         DISP=(MOD,DELETE,DELETE),
//         SPACE=(TRK,0)
//SYSPRINT DD SYSOUT=X

The PROC does this:
//FINDREP  PROC FIND=,
//         REPLACE=,
//         INPFILE=,
//         OUTFILE=
//**********************************************************************
//C1PARM01 EXEC PGM=PARMCOPY,
//             PARM='  SORT FIELDS=COPY'
//PARMFILE DD DSN=&&PARM,DISP=(NEW,PASS,DELETE),UNIT=DISK,
//         SPACE=(6233,(3),RLSE),DCB=(LRECL=80,BLKSIZE=1680,RECFM=FB)
//SYSPRINT DD   DUMMY
//**********************************************************************
//C1PARM02 EXEC PGM=PARMCOPY,
//             PARM=' OUTREC  FINDREP=(INOUT=(JP1,JP2))'
//PARMFILE DD DSN=&&PARM,DISP=(MOD,PASS,DELETE),UNIT=DISK,
//         SPACE=(6233,(3),RLSE),DCB=(LRECL=80,BLKSIZE=1680,RECFM=FB)
//SYSPRINT DD   DUMMY
//**********************************************************************
//SORTUSER EXEC PGM=SORT,PARM='JP1"&FIND",JP2"&REPLACE"'
//SORTLIB  DD   DSN=SYS1.SORTLIB,DISP=SHR
//SYSOUT   DD   SYSOUT=*
//SORTIN   DD  DISP=SHR,DSN=&INPFILE
//SORTOUT  DD  DSN=&OUTFILE,
//             DISP=(NEW,PASS),
//             DCB=(RECFM=FB,BLKSIZE=6240,LRECL=80),
//             UNIT=DISK,SPACE=(TRK,(1,1),RLSE)
//SORTWK01 DD   UNIT=SYSDA,SPACE=(32016,(428,1600))
//SORTWK02 DD   UNIT=SYSDA,SPACE=(32016,(428,1600))
//SORTWK03 DD   UNIT=SYSDA,SPACE=(32016,(428,1600))
//SORTWK04 DD   UNIT=SYSDA,SPACE=(32016,(428,1600))
//SORTWK05 DD   UNIT=SYSDA,SPACE=(32016,(428,1600))
//SYSIN    DD   DISP=(OLD,DELETE),DSN=&&PARM
//       PEND

Однако моя проблема заключается в том, что набор данных &&TEMP01 не удаляет все файлы, перечисленные в:

УДАЛИТЬ KAMSP2T.#TEST2.RAPW0RDS ОЧИСТИТЬ УДАЛИТЬ KAMSP2T.#TEST2.RAPW1RDW ОЧИСТИТЬ УДАЛИТЬ KAMSP2T.#TEST2.RAPW2RDS ОЧИСТИТЬ УДАЛИТЬ KAMSP2T.#TEST2.RAXY0RDA ОЧИСТИТЬ УДАЛИТЬ KAMSP2T.#TEST2.RASV0RDA ОЧИСТИТЬ

Есть ли способ удалить их?

Благодарен за любые предложения.

Спасибо, Мартин.


jcl
person Martin Spence    schedule 22.06.2017    source источник
comment
Файл TEMP01 содержит только набор результатов из программы, после чего вы быстро удаляете файл с помощью IEFBR14. TEMP01 действительно содержит входные данные для удаления вашего SYSIN. Возможно, проблема в программе, которую вы вызываете.   -  person SaggingRufus    schedule 22.06.2017
comment
Я пытался использовать команду DELETE IDCAMS://STEP1 EXEC PGM=IDCAMS //SYSIN DD * DELETE &&TEMP01 PURGE //SYSPRINT DD SYSOUT=X, но мне это тоже не понравилось...   -  person Martin Spence    schedule 22.06.2017
comment
Чего вы пытаетесь достичь?   -  person cschneid    schedule 23.06.2017
comment
Комментарий Брюса ответил на него. Спасибо   -  person Martin Spence    schedule 23.06.2017


Ответы (2)


IEFBR14 — это ничего не делающий шаг (он обозначает ветвь R14, которая в ассемблере мэйнфреймов является стандартным возвратом программы. IEFBR14 ничего не делает).

Вы можете использовать IDCAMS, например:

//DELETE   EXEC  PGM=IDCAMS
//SYSPRINT  DD   SYSOUT=*
//SYSIN     DD   *
   DELETE KAMSP2T.#TEST2.RAPW0RDS PURGE
   DELETE KAMSP2T.#TEST2.RAPW1RDW PURGE
   DELETE KAMSP2T.#TEST2.RAPW2RDS PURGE
   DELETE KAMSP2T.#TEST2.RAXY0RDA PURGE
   DELETE KAMSP2T.#TEST2.RASV0RDA PURGE
/*

в вашем случае вы можете сделать

//DELETE   EXEC  PGM=IDCAMS
//SYSPRINT  DD   SYSOUT=*
//SYSIN     DD   DSN=&&TEMP01,DISP=SHR

удаление IEFBR14 кодируется как

//DELETE EXEC PGM=IRFBR14
//DEL01   DD  DSN=KAMSP2T.#TEST2.RAPW0RDS,DISP=(MOD,DELETE),
//            SPACE=(TRK,(1,1))
//DEL02   DD  DSN=KAMSP2T.#TEST2.RAPW1RDW,DISP=(MOD,DELETE),
//            SPACE=(TRK,(1,1)) 
//DEL04   DD  DSN=KAMSP2T.#TEST2.RAXY0RDA,DISP=(MOD,DELETE),
//            SPACE=(TRK,(1,1))
//DEL05   DD  DSN=KAMSP2T.#TEST2.RASV0RDA,DISP=(MOD,DELETE),
//            SPACE=(TRK,(1,1))  

Традиционно IDCAMS был более гибким, чем удаление IEFBR14.

person Bruce Martin    schedule 23.06.2017
comment
Есть еще две приятные особенности использования IDCAMS для удаления наборов данных. Если одного из наборов данных нет, вы можете подавить CC 8, используя IF LASTCC = 8 после DELETE или IF MAXCC = 8 в качестве последней карты. (Обратите внимание, что 8 может быть возвращено по другим причинам, отличным от отсутствия в каталоге.) Кроме того, теперь, когда оба JES текущего уровня поддерживают символьную замену в DD в потоке с помощью ключевого слова SYMBOLS=, вы можете указать символы в контрольных картах. Убедитесь, что соответствующие символы находятся в операторе EXPORT JCL. - person zarchasmpgmr; 23.06.2017

Это также можно сделать в SAS. Имейте в виду, что в z/OS этот параметр UNIT часто по умолчанию равен чему-то вроде SYSDA и, следовательно, является необязательным в большинстве магазинов в наши дни. SAS, с другой стороны, не позволит закодировать UNIT в этом конкретном фрагменте кода из-за параметра MOD. Кроме того, программисты SAS понимают, что это будет работать даже для самих библиотек SAS, потому что SAS меняет методы доступа — от специально разработанного EXCP SAS к BSAM — и точно так же, как IEFBR14, который «ничего не делает», потому что он просто начинается и разветвляется для регистрации 14 - завершает - все, что запрошено в расположении - в этом случае "удалить" - будет иметь место независимо от метода доступа, который создал этот файл.

filename dd1 'myid.x.saslib' disp=(mod,delete) space=(trk,0);
filename dd1 clear;

Программисты SAS также понимают, что этот метод удаления библиотеки SAS — в отличие от набора данных SAS, который находится в библиотеке SAS — не описан ни в одной документации SAS. Это оно!!

И затем, конечно, разместить его внутри, а затем сразу же закодировать. Обратите внимание, что все, что больше 300 для вторичного сервера, должно иметь dsntype=large. И, наконец, поскольку здесь используется не QSAM или BSAM, а EXCP, коэффициент блокировки должен соответствовать способу доступа SAS к данным — по странице, а не по блоку. Обратите также внимание на то, что, как и в случае с TSO PDS, нецелесообразно кодировать RLSE в параметре SPACE.

libname dd1 'myid.x.saslib' disp=(,catlg,delete) space=(cyl,(50,500)) dsntype=large unit=(sysallda,59) blksize=6144;
person wolfen244    schedule 20.07.2017