■掲示板に戻る■ ■過去ログ倉庫めにゅーに戻る■
JCLってどうやって覚えるんでしょうかね
1 名前: PG初心者 投稿日: 2001/07/12(木) 13:42
仕事でJCLをやることになったのですが、参考書もなさそうですし
WEBで調べてもJCLの意味を載せてるHPはありましたが、JCLの
コーディングについて書いてあるHPが今のところ見つかりません。
誰か教えてください。


2 名前: 投稿日: 2001/07/12(木) 13:55
環境が分からなきゃ教えられないよ。


3 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 14:00
マニュアルに書いてあるだろ
EXEC文はオーロラエクスキューション!
DD文はダイヤモンドダスト!の略だ。


4 名前: PG初心者 投稿日: 2001/07/12(木) 14:01
環境とおっしゃると?
すみません本当に初心者なんで何も分からないんですよ。


5 名前: 投稿日: 2001/07/12(木) 14:03
なんのマシン使っとる?


6 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 14:05
要するにACOSのような邪道は聖闘士聖矢とは違うって事だ!


7 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 14:19
HITACすか?


8 名前: PG初心者 投稿日: 2001/07/12(木) 15:13
>5
メインフレームならIBMかCOMPAQのどちらかを使ってます。


9 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 15:42
ぶっといマニュアルついてるでしょ?
それじゃあ駄目なの?


10 名前: PG初心者 投稿日: 2001/07/12(木) 15:47
>9

それがないんです。
上司に聞こうにもいきなし『俺JCL分からないから聞いても無駄
だぞ!!』ってしょっぱなに跳ね除けられてしまったので、
こういう風に聞いてるのです。


11 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 16:49
/*************************************************** 00010000
/** ** 00020000
/** GEM モジユ-ル BACKUPヨウ JCL( ADTO ) ** 00030000
/** ** 00040000
/*************************************************** 00050000
//A22300H JOB ,CLASS=H,MSGCLASS=G,MSGLEVEL=(1,1),NOTIFY=A22300 00060000
//* 00070000
//************************************** 00080000
//* INITIALYZE * 00090000
//************************************** 00100000
//* 00110000
//MTINIT EXEC PGM=JSGINITT 00120000
//SYSPRINT DD SYSOUT=*,FLASH=LA4S 00130000
//TAPE1 DD UNIT=(CMT,,DEFER),DCB=DEN=4 00140000
//SYSIN DD * 00150000
TAPE1 INITT SER=ADTOHG,OWNER=FACOM,LABTYPE=SL,DISP=REWIND 00160000
//* 00170000
//* 00499800
//BKUP1 EXEC PGM=JSECOPY 00499900
//SYSPRINT DD SYSOUT=*,FLASH=LA4S 00500000
//* 00500100
//IN01 DD DSN=A22300.ADTOHG.OBJ,DISP=SHR 00500200
//IN02 DD DSN=A22300.ADTOHG.LOAD,DISP=SHR 00500300
//IN03 DD DSN=A22300.ADTOHG.DATA,DISP=SHR 00500400
//IN04 DD DSN=A22300.SYSGEN.DATA,DISP=SHR 00500600
//IN05 DD DSN=A22300.ADTO.CNTL,DISP=SHR 00500700
//* 00501202
//OUT01 DD UNIT=CMT,VOL=SER=ADTOHG,LABEL=(1,SL), 00501300
// DISP=(NEW,PASS),DSN=ADTOHG.OBJ 00501400
//OUT02 DD UNIT=CMT,VOL=SER=ADTOHG,LABEL=(2,SL), 00501500
// DISP=(NEW,PASS),DSN=ADTOHG.LOAD 00501600
//OUT03 DD UNIT=CMT,VOL=SER=ADTOHG,LABEL=(3,SL), 00501700
// DISP=(NEW,PASS),DSN=ADTOHG.DATA 00501800
//OUT04 DD UNIT=CMT,VOL=SER=ADTOHG,LABEL=(4,SL), 00501900
// DISP=(NEW,PASS),DSN=SYSGEN.DATA 00502000
//OUT05 DD UNIT=CMT,VOL=SER=ADTOHG,LABEL=(5,SL), 00502300
// DISP=(NEW,PASS),DSN=ADTO.CNTL 00502400
//* 00503102
//SYSUT3 DD UNIT=SYSDA,SPACE=(TRK,(1)) 00503202
//SYSIN DD * 00503302
COPY OUTDD=OUT01,INDD=IN01 00503402
COPY OUTDD=OUT02,INDD=IN02 00503502
COPY OUTDD=OUT03,INDD=IN03 00503602
COPY OUTDD=OUT04,INDD=IN04 00503702
COPY OUTDD=OUT05,INDD=IN05 00503802
//* 00513507


12 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 16:51

これはFの汎用機でデータセットをCMTにバックアップ
するJCL。
聞きたい事あったら聞いて。


13 名前: PG初心者 投稿日: 2001/07/12(木) 17:05
>12

わざわざありがとうございます。

まずDDって何ですか?
それにSHR 00500200
ってなにを意味してるんでしょうか?
すみません。バカじゃないの?って思われてますよね。


14 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 17:07
JCLは必ずひとの書いたのをコピペして流用するのが作法。
「このパラメータっていらなそうだけど何に使うんだろ」と削るのに
不安を感じたら迷わず残します。わざわざマニュアルで調べるなんて
むだな作業をしてはなりません。

新しくイチからJCLを書き下ろすというのは最も行儀の悪い行為として
Sヨ仲間から軽蔑されます。


15 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 17:18
>>13
データセットって分かる?
COBOL書いた事ある?


16 名前: 12 投稿日: 2001/07/12(木) 17:34
00500200とかいうのはただのゴミです。
無視して下さい。

DISP=SHRはこのデータセットは共用する
(排他はかけない)つー事です。

DDつーのはやってればわかりますよ。


17 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 17:51
>>11
JCL知らない人間にとっては、全部コメントに見える(藁


18 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 17:57
>>17
確かに!(藁


19 名前: PG初心者 投稿日: 2001/07/12(木) 18:06
>14
ありがとうございます。
でもその書いてある意味が分からないとどうしようもないですよね。
ま−今までVB等をやってきたのですが、そのときは使えるものは
全部パクッテました。
多分JCLで仕事をするときもそうするでしょうね。

COBOLは学生の時に授業でやったくらいでそれからやってません。
でもデータセットは分かります。


20 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 20:06
>>17

え?コメントじゃないの?(ショック・・・)


21 名前: 別の初心者 投稿日: 2001/07/12(木) 20:07
便乗で質問したいのですが、ひょっとして UNIX の dd もこの DD か
ら来てるのですか? あれだけなんか他のコマンドから書式が浮いて
るので気になっていたのですが、、


22 名前: 新卒のCOBOLの人 投稿日: 2001/07/12(木) 21:21
新卒ですがJCLでデバッグとかテストとかしています。
初心者ながらアレですが、これは言語というより、単なる設定のような気がします。


23 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 22:20
>>21
するどい!そうらしいです!


24 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 23:40
>>21
> 便乗で質問したいのですが、ひょっとして UNIX の dd もこの DD か
> ら来てるのですか? あれだけなんか他のコマンドから書式が浮いて
> るので気になっていたのですが、、

書式自体はそうだったと思うけど、ddって名前自体は違う。
convert & copyだかその逆でccってしたかったんだけどもう使われ
てたから。


25 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 23:46
>>23
それは違うよ。DDってネーミングに関してははっきりした説はないよ。


26 名前: 21 投稿日: 2001/07/13(金) 00:37
なるほど。分りました。
書式を合わせたのは一種のユーモアだったのでしょうね。


27 名前: 24 投稿日: 2001/07/13(金) 00:38
>>25
> >>23
ん、>>23じゃなくて>>24?

> それは違うよ。DDってネーミングに関してははっきりした説はないよ。
たしかに出所もいまいちはっきりしないしなぁ…。
とりあえず撤回しとこう。まぁそんな説も聞いたことあるってことで。


28 名前: PG初心者 投稿日: 2001/07/13(金) 10:02
こんな本番にのってるものをここに載せて良いのか非常に悩むところですが、
本当にわからないので神頼み的な感じで載せてしまいます。詳しく教えていただければすごく助かります。

//MAMHREPO JOB MXMAN,MSGLEVEL=(2,0),CLASS=G,MSGCLASS=D
//*********************************************************************
//* ヘンピン カンリヨウ サクセイ (タンジユン リラン OK)
//** === D4T ゼンゼンゲツド & ゼンゲツド VOL=SER シテイ (ゲツジ タイオウ) ===
//** オンライン(IMS) シユウリヨウゴ タイオウ ノトキ ハ STEP S05P & S08P ヲ シユウセイ
//** シユウセイ DLIBATCH ニ シテ サラニ マスターDB ヲ ツナグ 1989.1 H.N
//*********************************************************************
//OUT2 OUTPUT FORMDEF=X001,PAGEDEF=X001,CHARS=KN12
//*
//S01P EXEC SELECT,OUT='*'
//SYSUT1 DD DSN=MA.A000D4T,DISP=SHR,UNIT=CART
//* VOL=SER=(XXXXXX,XXXXXX)
//SYSUT2 DD DUMMY
//SYSUT3 DD DSN=&&D4T,UNIT=DISK,DISP=(,PASS),
// SPACE=(CYL,(400,10),RLSE),
// DCB=(RECFM=FB,LRECL=400,BLKSIZE=23200)
//SYSIN DD *
OPEN=SYSUT3
KEY=(2,1,C,(4))
/*
//************************************************
//** S01P デ サクセイ シタ D4T ヲ セダイ フアイル ニ COPY ***
//************************************************
//S02P EXEC JSCOPY,OUT='*'
//PSPSIN DD DSN=&&D4T,DISP=(OLD,DELETE),UNIT=DISK
//PSPSOUT DD DSN=GDGMV.H000D4T(+1),UNIT=CART,DISP=(,CATLG,UNCATLG),
// LABEL=EXPDT=99006,
// DCB=(RECFM=FB,LRECL=400,BLKSIZE=23200)


29 名前: PG初心者 投稿日: 2001/07/13(金) 10:03
>>28
続きです。

//** ----------- アカクロ ブンリ フアイル サクセイ ---------------------------
//S03P EXEC PGM=MAMN100
//STEPLIB DD DSN=YAM1.MMLODLIB,DISP=SHR
/*
//PIN1 DD DSN=GDGMV.H000D4T(+1),DISP=SHR,UNIT=CART /*トウゲツド*/
// DD DSN=GDGMV.H000D4T(0),DISP=SHR,UNIT=AFF=PIN1 /*ゼンゲツ */
// DD DSN=GDGMV.H000D4T(-1),DISP=SHR,UNIT=AFF=PIN1 /*ゼンゼン */
//POUT1 DD DSN=&&AKA,DISP=(,PASS),UNIT=DISK,
// DCB=(RECFM=FB,LRECL=100,BLKSIZE=23400),
// SPACE=(CYL,(20,10),RLSE)
//POUT2 DD DSN=&&KURO,DISP=(,PASS),UNIT=DISK,
// DCB=(RECFM=FB,LRECL=100,BLKSIZE=23400),
// SPACE=(CYL,(350,10),RLSE)
//SYSPRINT DD SYSOUT=*
//PLIDUMP DD DUMMY
//* ======== BYS コントロ-ル カド 1 カラム ヨリ MAMNT100YYMMDDYYMMDD
//* ======== CARD ナシ ハ ゲツポ- キカン
//SYSIN DD *
/*
//SOS EXEC CONDCHK,COND=(0,EQ,S03P)
//SYSIN DD *
**** S03P **** PL/I-PGM イジヨウ
/*
//* --------------- オリジナル ユ-コ,キコ,ノウニユウヒズケ,スウリヨウ --------------
//S04S EXEC YSORT
//SORTIN DD DSN=&&AKA,DISP=(OLD,PASS)
//SORTOUT DD DSN=&&AKA,DISP=(OLD,PASS),VOL=REF=*.SORTIN
//SYSIN DD *
SORT FIELDS=(24,12,CH,A, C
48,12,CH,A, C
12,12,CH,A, C
6,6,CH,A, C
80,4,PD,A)
/*
//* --------------- オリジナル ユ-コ,キコ,ノウニユウヒズケ,スウリヨウ --------------
//S05S EXEC YSORT
//SORTIN DD DSN=&&KURO,DISP=(OLD,PASS)
//SORTOUT DD DSN=&&KURO,DISP=(OLD,PASS),VOL=REF=*.SORTIN
//SYSIN DD *
SORT FIELDS=(24,12,CH,A, C
48,12,CH,A, C
12,12,CH,A, C
6,6,CH,A, C
80,4,PD,A)
/*


30 名前: デフォルトの名無しさん 投稿日: 2001/07/13(金) 10:05
花〜


31 名前: PG初心者 投稿日: 2001/07/13(金) 10:07
>>28>>29の続きです
//* --------------- アカクロ ツイイ フアイル サクセイ -----------------------
//S06P EXEC PGM=MAMN200
//STEPLIB DD DSN=YAM1.MMLODLIB,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//PIN1 DD DSN=&&AKA,DISP=(OLD,DELETE),UNIT=DISK
//PIN2 DD DSN=&&KURO,DISP=(OLD,DELETE),UNIT=DISK
//POUT1 DD DSN=&&TSUFL,UNIT=DISK,DISP=(NEW,PASS),
// SPACE=(CYL,(50,10),RLSE),
// DCB=(RECFM=FB,LRECL=500,BLKSIZE=23000)
//SOS EXEC CONDCHK,COND=(0,EQ,S06P)
//SYSIN DD *
**** S06P **** PL/I-PGM イジヨウ
/*
//* -------------- マスタ- ヒキナオシ --------------------------------
//*S07P EXEC DLIBATCH,MBR=MAMN300,PSB=SGMP010
//S07P EXEC YIMSBMP,MBR=MAMN300,PSB=SGMP010
//STEPLIB DD DSN=YAM1.MMLODLIB,DISP=SHR
//DFSVSAMP DD DSN=GR.GRPARM(NOLONG),DISP=SHR
//SYSPRINT DD SYSOUT=*
//PLIDUMP DD DUMMY
//PIN1 DD DSN=&&TSUFL,UNIT=DISK,DISP=(OLD,DELETE)
//POUT1 DD DSN=&&TSUFL1,UNIT=DISK,DISP=(NEW,PASS),
// SPACE=(CYL,(50,10),RLSE),
// DCB=(RECFM=FB,LRECL=500,BLKSIZE=23000)
//*MDDB0020 DD DSN=MD.MDDB0020,DISP=SHR
//*MYDB003X DD DSN=MD.MYDB003X,DISP=SHR
//*MYDB0030 DD DSN=MD.MYDB0030,DISP=SHR
//*MDDB0010 DD DSN=MD.MDDB0010,DISP=SHR
//* チヨウザイ ユ-ザ シヨクイ タンコ チヤネル カナ シンカンリ キカクカナ ノウニユウヒズケ
//S08P EXEC YSORT
//SORTIN DD DSN=&&TSUFL1,DISP=(OLD,PASS)
//SORTOUT DD DSN=&&TSUFL1,DISP=(OLD,PASS),VOL=REF=*.SORTIN
//SYSIN DD *
SORT FIELDS=(158,12,CH,A, C
182,2,CH,A, C
184,12,CH,A, C
170,12,CH,A, C
211,15,CH,A, C
260,15,CH,A, C
118,28,CH,A, C
230,6,CH,A)
/*


32 名前: PG初心者 投稿日: 2001/07/13(金) 10:07
またまた続き
//*********************************************************************
//S09P EXEC JSCOPY
//PSPSIN DD DSN=&&TSUFL1,DISP=(OLD,PASS)
//PSPSOUT DD DSN=MA.TSUFL,UNIT=CART,DISP=(,KEEP),
// LABEL=RETPD=0010,
// DCB=(RECFM=FB,LRECL=500,BLKSIZE=23000)
//* --------------- ヘンピン カンリヨウ レポ-ト サクセイ -------------------
//*S10P EXEC DLIBATCH,MBR=MAMN500,PSB=SGMP020
//S10P EXEC YIMSBMP,MBR=MAMN500,PSB=SGMP020
//STEPLIB DD DSN=YAM1.MMLODLIB,DISP=SHR
//DFSVSAMP DD DSN=GR.GRPARM(NOSHORT),DISP=SHR
//SYSPRINT DD SYSOUT=*
//PLIDUMP DD DUMMY
//PIN1 DD DSN=&&TSUFL1,DISP=(OLD,DELETE)
//PRINT2 DD DSN=&&TSUFL2,DISP=(NEW,PASS),UNIT=DISK,
// SPACE=(CYL,(10,10),RLSE),
// DCB=(RECFM=FB,LRECL=153,BLKSIZE=1530)
//*MYDB001X DD DSN=MD.MYDB001X,DISP=SHR
//*MYDB0010 DD DSN=MD.MYDB0010,DISP=SHR
//*MYDB002X DD DSN=MD.MYDB002X,DISP=SHR
//*MYDB0020 DD DSN=MD.MYDB0020,DISP=SHR
//*
//S11P EXEC MACCP,CTL=MACCPA4,OUT=3,CHARS=,FCB=,FLASH=
//PIN1 DD DSN=&&TSUFL2,DISP=(OLD,DELETE),UNIT=DISK
//POUT1 DD SYSOUT=3,OUTPUT=*.OUT2,
// DCB=(RECFM=FBA,LRECL=133,BLKSIZE=1330)
//*
//
//***------- '92/10 ヨリ ハイシ ----------------------****
//S12P EXEC JSCOPY,OUT='*'
//PSPSIN DD DSN=&&TSUFL2,DISP=(OLD,DELETE),UNIT=DISK
//OUT1 OUTPUT FORMDEF=X001,
// PAGEDEF=X001,
// CHARS=KN12
//PSPSOUT DD SYSOUT=3,OUTPUT=*.OUT1,
// COPIES=01,
// DCB=(RECFM=FBA,LRECL=0133,BLKSIZE=01330)
// MAMHREPO


33 名前: デフォルトの名無しさん 投稿日: 2001/07/13(金) 10:56
まず、全体の構造を見てください。
頭にJOB文があって、複数のEXEC文(+DD文)が繋がっていることが判ると思います。
このEXEC文(+DD文)のかたまりをSTEPといいます。
このSTEPが一つのプログラムを動かす単位と、まずは考えてください。


34 名前: 33 投稿日: 2001/07/13(金) 11:05
このJCLを実行すると、
かかれている順番にSTEP(つまりプログラム)が実行されていきます。
(最近一部で複数STEPをパラレルに動かせるものもありますが、
あまり一般的ではないのでここでは説明しません)
このときに各プログラムを実行するための、
環境資源を定義したものがDD文です。


35 名前: 33 投稿日: 2001/07/13(金) 11:13
上で提供されている例を見ると、
「EXEC」のすぐ後ろに何らかの名称らしきものが記述されているものと、
PGM=のあとに名称があるものの2つのパターンに分けられると思います。
このPGM=のあとにかかれているものが、
(そのまんまですが)プログラム名です。
で、「EXEC」のすぐ後ろにかかれているもの、
これをプロシージャ名と呼ぶことを覚えておいてください。


36 名前: 33 投稿日: 2001/07/13(金) 11:35
PGM=でプログラム名が書かれているものは、
そのSTEP内にそのプログラムを動かす、
全ての環境資源を定義しなければいけません。
(JOBLIB、JOBCATという例外についてはあとで説明します)
一方、プロシージャ名を指定してあるものは、
どこかにその雛型があり、それを修飾して使うものと考えてください。
そのJCLの内部にあるものをインストリームプロシージャ、
システムが参照するライブラリに登録されているものを、
カタログドプロシージャと呼びます。


37 名前: 33 投稿日: 2001/07/13(金) 11:44
プロシージャの修飾ですが、これはあくまでも必要であれば行うものです。
>>32の例ですが、
//S11P EXEC MACCP,CTL=MACCPA4,OUT=3,CHARS=,FCB=,FLASH=
//PIN1 DD DSN=&&TSUFL2,DISP=(OLD,DELETE),UNIT=DISK
//POUT1 DD SYSOUT=3,OUTPUT=*.OUT2,
// DCB=(RECFM=FBA,LRECL=133,BLKSIZE=1330)
//*
となっていますが、
これはMACCPというカタログドプロシージャに書かれている、
(若しくは必要なのに元々書かれていない)
「PIN1」と「POUT1」というDDについて、
実行時に指定しています。


38 名前: 33 投稿日: 2001/07/13(金) 11:56
>>1
ここまでのところでなにかある?


39 名前: PG初心者 投稿日: 2001/07/13(金) 13:11
>>33>>34>>35ありがとうございます。
ほんのちょっとずつ解ってきました。


40 名前: PG初心者 投稿日: 2001/07/13(金) 13:16
>>33
最初のほうの
DD DUMMYってどういうことなんですか?
ダミーなら記述しなければ良いんじゃないんですか?


41 名前: デフォルトの名無しさん 投稿日: 2001/07/13(金) 13:35
出力は亡き者にするということ。


42 名前: デフォルトの名無しさん 投稿日: 2001/07/13(金) 13:55
SELECTてのが君の環境依存のユーティリティなんだろ。
ソースが存在してるなら中見て比較した方が早いと思う。
俺はホスト系はCOBOLしか知らないが、FILE-CONTROLとDD文を比較してみそ。
SYSIN DD *で渡されるパラメータによってはSYSUT2を使用するパターンもあるんだと想像してみる。
君の環境を知ってる人じゃないと100%の答えは無理だと思うよ。
まぁ、聖闘士聖矢系のJCLで良かったな!


43 名前: デフォルトの名無しさん 投稿日: 2001/07/13(金) 14:01
>>7
俺に言ってるのか?
ACOS以外のJCLは皆IBMのマネッコじゃないのか?
俺はIBMとFACOMとACOSしか見た事が無いが、日立系の人もIBMと一緒だと言っていた
ACOS以外はみんな似てるんじゃないか?


44 名前: 33 投稿日: 2001/07/13(金) 14:03
>>40
では、次にプログラムとDDの関係について説明しましょう。
プログラムが入力や出力として使用するデータセットを、
DD文で指定します。(ここでもxxxLIB/xxxCATの例外はありますが)
プログラムがそのSTEP内に記述されているどのデータセットを、
どのように使用するかの関連付けには、2つのパターンがあります。
プログラム内にDD名を記述してあるものと、実行時に指定(SYSINなどから)するものです。
一般的なプログラムは前者で、メーカーのユーティリティなどに後者のようなものがある、
と思ってもらって良いです。
で、プログラム内にDD名を記述してある、とはどういうことかというと、
//STEP1  EXEC PGM=A
//IN01   DD DSN=NNN,DISP=SHR
//OUT01   DD DSN=ZZZ,DISPSHR
Aというプログラムを起動すると、IN01という固定のDD名のデータセットを入力に、
OUT01という固定のDD名のデータセットを出力に使うといった動きになるケースでは、
プログラムA内の記述として「IN01」という固定の名前そのものと、
INPUTととして使用(オープン)するという情報と、
「OUT01」という固定の名前そのものと、
OUTPUTととして使用(オープン)するという情報が書かれていると言うことです。


45 名前: 33 投稿日: 2001/07/13(金) 14:13
>>40
つまりプログラムAを動かすと、「IN01」「OUT01」の2つのデータセットを
オープンにいくという結果になります。
このようなケースでOUTPUTの結果をデータセットに残さなくても結構、
と言うときにDD DUMMYを使います。
結果がいらないからといって、OUT01を無くしたりすると、オープンエラーに
なってしまうことが多いので、単純に消してしまってはいけません。
プログラムによっては、そのDD名を持ったDD文があるかどうかチェックして
からオープンするつくりになっているものもありますが、
動かしてみなければ判らなかったりする上に、
とんでもなくリカバリの手間がかかったりするので、お勧めしません。


46 名前: PG初心者 投稿日: 2001/07/13(金) 14:55
>>42
聖闘士聖矢系のJCLって何のことですか?


47 名前: PG初心者 投稿日: 2001/07/13(金) 15:23
>>33
ご丁寧にありがとうございます。
上記の説明でDUMMYについても理解できました。あとですねわからないのが、
//S01P EXEC SELECT,OUT='*'
//SYSUT1 DD DSN=MA.A000D4T,DISP=SHR,UNIT=CART
//* VOL=SER=(XXXXXX,XXXXXX)
//SYSUT2 DD DUMMY
//SYSUT3 DD DSN=&&D4T,UNIT=DISK,DISP=(,PASS),
// SPACE=(CYL,(400,10),RLSE),
// DCB=(RECFM=FB,LRECL=400,BLKSIZE=23200)
最初のSYSUT1の部分のDSNはファイルを指定してるってのは
解るのですが、その後のSYSUT3の部分の&&D4Tこれが解りません。
これというのはどういうことを言ってるのですかね?教えてください。
その後のSPACEとかも解りません。
お願いします。


48 名前: 33 投稿日: 2001/07/13(金) 16:14
>>47
これは、データセットの使用形態に関係します。
DISPパラメータに注目してください。
「DISP=SHR」「DISP=(,PASS)」はそれぞれ
「DISP=(SHR,KEEP)」「DISP=(NEW,PASS)」の省略形です。
SHR/NEWにあたる部分が、現状どうで、どう使用するか?を、
KEEP/PASSの部分が、使用後にどうするかを書くところです。
(実際には第3パラメータとして異常終了時の扱いを書くこともあります。
例:DISP=(NEW,KEEP,DELELTE))
で、SHRというのは前にも出ましたが、現在あるものを共有して使用する
と言う意味です。NEW/KEEPは言葉通りですので想像がつくと思います。
SYSUT3のPASSが判りにくいと思うのですが、
「後のSTEPでも引き続き使用する」と思ってください。
つまり、(,PASS)というのは新たにデータセットを作成し、
後のSTEPでも引き続き使用すると言うことを表しています。
では、なぜ&&D4Tというデータセットとして成立しない名前なのか、
というと、このデータセットが最終的には(このJOB終了後には)保存の
必要が無いものだからです。
各STEPでの途中経過として引き渡されるデータはこのように、
形態で(これを一時データセット)定義することが出来ます。
もちろんちゃんとした名前を付けたデータセットとして、
毎回作成し、最後には削除するようにJCL上で記述しても問題は
ありませんが、その場合はどこにとか、常に作成できるようにとか、
気にしなければならない問題が出てきて厄介です。


49 名前: 33 投稿日: 2001/07/13(金) 16:28
>>47
次にSPACEですが、これはデータセットを作成するサイズを指定するパラメータです。
ですから、前述のDISPパラメータともちょっと関連します。

つまり、DISP=(NEW,〜)若しくは省略形のDISP=(,〜)の時にしか、
意味を持たないパラメータです。
DISP=SHRと宣言しているデータセットにSPACEパラメータを指定しても、
データセットのサイズが変わると言うことはありません。
よって、データセットの拡張をしたいからといって、DISP=SHRで、
SPACEを増やして実行しても出来ないので注意が必要です。

その下のDCBパラメータはそのデータセットのレコード長や、フォーマット
などの情報なので、通常は変更することはあまりありません。


50 名前: 33 投稿日: 2001/07/13(金) 16:32
>>47
>各STEPでの途中経過として引き渡されるデータはこのように、
>形態で(これを一時データセット)定義することが出来ます。

>各STEPでの途中経過として引き渡されるデータはこのような形態で定義
>(これを一時データセットと呼ぶ)することが出来ます。

の方が判りやすいですね。
一時データセットはWindows等でいうTEMPファイルと思ってください。


51 名前: PG初心者 投稿日: 2001/07/13(金) 16:57
>>33
すごい。
やっぱりここに書き込んでよかったです。
こうなると>>28,>>29,>>31,>>32はほとんど理解したのも
同然ですかね?
あと今さらですが、SQLを仕事で今までやっていて>>17 で書いてありましたが、
本当にすべてがコメントに見えてしまいます。
とくに/*の部分!!
JCLのコメントは//*で良いのですか?
あとDSNのファイ名の横に”(+1)”とか書いてありますがこれは
どういうことですか?
//PIN1 DD DSN=GDGMV.H000D4T(+1),DISP=SHR,UNIT=CART
                ↑これです。
本当に申し訳ございません。


52 名前: 33 投稿日: 2001/07/13(金) 17:27
JCLのコメントは//*が正解です。

ちなみに/*は
//SYSIN DD *
のあとに書くデータ行の終わりを示します。
>>28のS01Pステップの例でいうと、/*の前2行がプログラムにデータとして渡されます。
//SYSIN DD *
OPEN=SYSUT3
KEY=(2,1,C,(4))
/*

ただし、/*がなくて普通のDD文が後に続いても、それ以降はデータとして
渡っていかないので、省略されていても問題はありません。
また、//*でなく/*が突然現れてもコメントと同様に扱われるはず(この辺はちょっと曖昧)
なので、そんなに神経質になる必要は無いでしょう。
良くある失敗としては、途中に「// 」の行を挟んでしまうことでしょう。
>>32が良い例ですが、「// 」以降は無効なJCLとして扱われるので、
注意してください。(一時的に途中まで実行したいときなどに有効)
ただし、その後に再度JOB文が現れると別JOBとして認識されるので、
これも注意が必要でしょう
一つのメンバのSUBMITで複数のJOBを起動してしまうので、管理上はあまりお勧めしません。


53 名前: 33 投稿日: 2001/07/13(金) 17:47
>>51
で、
//PIN1 DD DSN=GDGMV.H000D4T(+1),DISP=SHR,UNIT=CART
の件ですね。
これは、OSが管理しているGDGカタログによって、
データセットに世代を持たせて利用している例です。
簡単に言うと、営業日が5日間で月曜から金曜までのデータを
上書きせずに保存したい!
でも毎日違うJCLをSUBMITするのはいやだ!
SUBMITするときにいちいちJCLを変えるのはもっといや!
と言ったときに使用すると有効です。

OSのGDGカタログというものにGDGMV.H000D4Tと言う名前のデータセット
で5つの世代があるもの、という登録をします。
でこのデータセットに書き込みを行うと、第何世代目に書かれたかが、
GDGカタログ上記憶されます。
このとき(+1)という記述をすると、「最後に書き込んだ世代+1」の
世代のデータセットを使用する事になります。
同様に(0)と書くと、最後に書き込んだもの、
(-1)と書くと、最後から2番目に書き込んだものと言う指定になります。

つまり「DSN=GDGMV.H000D4T(+1)」という記述のままで、
世代管理された複数のデータセットの最新世代への書き込みを行えるように
なります。
ただし、これも間違えて2度実行すると、次の世代に書いてしまったり、
大変なことになるので要注意。
(単純リラン可とか不可って聞いたことがあるかもしれません)


54 名前: 33 投稿日: 2001/07/13(金) 18:26
もうそろそろ家に帰ります。
ってやっぱり会社から書いてたんかいっ!
なんか今日は今までで一番2chにマジレスした日になってしまった。
なんか質問や間違いがあったら、書いておいてくり。
家に帰ってから、もう一回観にくると思うからさ。
う〜、だんだん週末モードになってきた。んじゃ。


55 名前: デフォルトの名無しさん 投稿日: 2001/07/14(土) 00:52
>>28
>こんな本番にのってるものをここに載せて良いのか非常に悩むところですが、
守秘義務を思い出せ!ばれたら九尾だぞ!


56 名前: デフォルトの名無しさん 投稿日: 2001/07/15(日) 01:50
JCLで一番重要なのは「DISP」だと思う。
これを間違えると大変だよね。


57 名前: デフォルトの名無しさん 投稿日: 2001/07/15(日) 01:51
多分、平気だろ。でも懐かしいわぁ。前の会社でやってたぜ。UNIT=SYSDAとかね。


58 名前: デフォルトの名無しさん 投稿日: 2001/07/15(日) 05:02
33さんっていい人だぁ。
僕もIBM系のJCLは大体分かってるつもりでは
いたけど、こんなに上手に説明できないわ。
守秘義務sage。


59 名前: 33 投稿日: 2001/07/15(日) 14:48
>>28
そうですよね。
いたづらにDISP=OLDって指定しちゃうと、
デットロックとか起こりかねないし.....。
まぁ、DISPの指定を理解してIEFBR14(FやHでは〜DUMMYでしたっけ)
をちゃんと使えるようになるのが第一歩ですかねぇ。


60 名前: PG初心者 投稿日: 2001/07/16(月) 09:54
うーん今日からまた1週間が始まってしまった。
っと言うことでまたJCLのお勉強!!
>>33
本当にご親切にありがとうございます。

また質問すると思うのでそのときはよろしくお願いいたします。


61 名前: PG初心者 投稿日: 2001/07/17(火) 10:46
また質問です。
KEY=(1,1,C,(0)),FIELD=(419,1,C,(,A))
のKEY及びFIELD部分のカッコ内の意味を教えてください。


62 名前: 33 投稿日: 2001/07/17(火) 14:08
う〜ん、これはJCLというよりも、
SYSINで与えるパラメータ(データ)に関する質問ですね。

基本的には各プログラム(PGM=xxxxxxxで書かれているもの)が独自に受け取っているので、
その使用手引きなり、仕様書を見ないと判らないんですが、
この形態がSORTのパラメータとほぼ同じなので、
想像で答えてみます。
最初の数字が対象のオフセット、次が長さ、次が種類、次が処理方法?だと思います。
つまりあるファイルの処理をするときに、
FIELD=(419,1,C,(,A)) を例とすると、
419  バイトめの
1   バイトのエリアに入っている
C   つまりキャラクタを、
A   昇順(アセンディング)に処理する
と言う意味だと思われます。
多分この形態だと、行っている処理はソートかオミットあたりかと思いますが、
使用手引き等があるのなら見せてもらっても良いでしょう。
このタイプのパラメータならば、プログラムかデータの変更という、
ちょっと注意が必要な場合しか、変える必要は無いと思うので、
あまり気にしないで、放って置くとかでも良いかと思います。

結構、だらだらと書いてますが、特に親切って訳じゃないですから...。
この内容には、この文体のほうが書きやすいだけで、
他のスレでは、オマエモナーとか書いてたりするほうなんで、
あまり丁寧にレスしてくれなくてもいいっすよ。


63 名前: 33 投稿日: 2001/07/17(火) 14:15
>>62
自己レスごめん
>419  バイトめの
>1   バイトのエリアに入っている
>C   つまりキャラクタを、
>A   昇順(アセンディング)に処理する
判りにくかったですね。
簡単に言うと同じフォーマットの大量データで、419バイト目に年齢が入っている
ようなケースで、年齢順にレコードを並べ替えたりするときに、ってこと。
まぁ、1バイトだから年齢ってのは無理があるかも知れないけど....。


64 名前: PG初心者 投稿日: 2001/07/18(水) 15:09
次の質問です。>>32の部分周辺の処理の意味がよく解りません。
誰か教えてください。


65 名前: 33 投稿日: 2001/07/19(木) 12:19
>>64
ちょっと質問が判りにくいなぁ。
部分周辺?


66 名前: 投稿日: 2001/07/19(木) 12:30
処理だけだったらSTEP09〜11までファイルを読んで出力してるだけ。


67 名前: 投稿日: 2001/07/19(木) 12:30
12までだった。


68 名前: デフォルトの名無しさん 投稿日: 2001/07/19(木) 20:59
>>67
12の前で//入ってるから別に09〜11で良かったんじゃない


69 名前: PG初心者 投稿日: 2001/07/24(火) 10:51
//DD名 DD SYSOUT = 出力クラス
という説明に出力クラス”*”はMSGCLASSと同じ事を意味すると
書かれてたのですが、MSGCLASSって何のことでしょうか?
教えてください。


70 名前: PG初心者 投稿日: 2001/07/24(火) 16:43
>>69のこと誰か教えてくださ〜い