JCLってどうやって覚えるんでしょうかね

このエントリーをはてなブックマークに追加
1PG初心者
仕事でJCLをやることになったのですが、参考書もなさそうですし
WEBで調べてもJCLの意味を載せてるHPはありましたが、JCLの
コーディングについて書いてあるHPが今のところ見つかりません。
誰か教えてください。
2:2001/07/12(木) 13:55
環境が分からなきゃ教えられないよ。
3デフォルトの名無しさん:2001/07/12(木) 14:00
マニュアルに書いてあるだろ
EXEC文はオーロラエクスキューション!
DD文はダイヤモンドダスト!の略だ。
4PG初心者: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すか?
8PG初心者:2001/07/12(木) 15:13
>5
メインフレームならIBMかCOMPAQのどちらかを使ってます。
9デフォルトの名無しさん:2001/07/12(木) 15:42
ぶっといマニュアルついてるでしょ?
それじゃあ駄目なの?
10PG初心者: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。
聞きたい事あったら聞いて。
13PG初心者: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書いた事ある?
1612:2001/07/12(木) 17:34
00500200とかいうのはただのゴミです。
無視して下さい。

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

DDつーのはやってればわかりますよ。
17デフォルトの名無しさん:2001/07/12(木) 17:51
>>11
JCL知らない人間にとっては、全部コメントに見える(藁
18デフォルトの名無しさん:2001/07/12(木) 17:57
>>17
確かに!(藁
19PG初心者: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ってネーミングに関してははっきりした説はないよ。
2621:2001/07/13(金) 00:37
なるほど。分りました。
書式を合わせたのは一種のユーモアだったのでしょうね。
2724:2001/07/13(金) 00:38
>>25
> >>23
ん、>>23じゃなくて>>24?

> それは違うよ。DDってネーミングに関してははっきりした説はないよ。
たしかに出所もいまいちはっきりしないしなぁ…。
とりあえず撤回しとこう。まぁそんな説も聞いたことあるってことで。
28PG初心者: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)
29PG初心者: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
花〜
31PG初心者: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)
/*
32PG初心者: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が一つのプログラムを動かす単位と、まずは考えてください。
3433:2001/07/13(金) 11:05
このJCLを実行すると、
かかれている順番にSTEP(つまりプログラム)が実行されていきます。
(最近一部で複数STEPをパラレルに動かせるものもありますが、
あまり一般的ではないのでここでは説明しません)
このときに各プログラムを実行するための、
環境資源を定義したものがDD文です。
3533:2001/07/13(金) 11:13
上で提供されている例を見ると、
「EXEC」のすぐ後ろに何らかの名称らしきものが記述されているものと、
PGM=のあとに名称があるものの2つのパターンに分けられると思います。
このPGM=のあとにかかれているものが、
(そのまんまですが)プログラム名です。
で、「EXEC」のすぐ後ろにかかれているもの、
これをプロシージャ名と呼ぶことを覚えておいてください。
3633:2001/07/13(金) 11:35
PGM=でプログラム名が書かれているものは、
そのSTEP内にそのプログラムを動かす、
全ての環境資源を定義しなければいけません。
(JOBLIB、JOBCATという例外についてはあとで説明します)
一方、プロシージャ名を指定してあるものは、
どこかにその雛型があり、それを修飾して使うものと考えてください。
そのJCLの内部にあるものをインストリームプロシージャ、
システムが参照するライブラリに登録されているものを、
カタログドプロシージャと呼びます。
3733: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について、
実行時に指定しています。
3833:2001/07/13(金) 11:56
>>1
ここまでのところでなにかある?
39PG初心者:2001/07/13(金) 13:11
>>33>>34>>35ありがとうございます。
ほんのちょっとずつ解ってきました。
40PG初心者: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以外はみんな似てるんじゃないか?
4433: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ととして使用(オープン)するという情報が書かれていると言うことです。
4533:2001/07/13(金) 14:13
>>40
つまりプログラムAを動かすと、「IN01」「OUT01」の2つのデータセットを
オープンにいくという結果になります。
このようなケースでOUTPUTの結果をデータセットに残さなくても結構、
と言うときにDD DUMMYを使います。
結果がいらないからといって、OUT01を無くしたりすると、オープンエラーに
なってしまうことが多いので、単純に消してしまってはいけません。
プログラムによっては、そのDD名を持ったDD文があるかどうかチェックして
からオープンするつくりになっているものもありますが、
動かしてみなければ判らなかったりする上に、
とんでもなくリカバリの手間がかかったりするので、お勧めしません。
46PG初心者:2001/07/13(金) 14:55
>>42
聖闘士聖矢系のJCLって何のことですか?
47PG初心者: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とかも解りません。
お願いします。
4833: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上で記述しても問題は
ありませんが、その場合はどこにとか、常に作成できるようにとか、
気にしなければならない問題が出てきて厄介です。
4933:2001/07/13(金) 16:28
>>47
次にSPACEですが、これはデータセットを作成するサイズを指定するパラメータです。
ですから、前述のDISPパラメータともちょっと関連します。

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

その下のDCBパラメータはそのデータセットのレコード長や、フォーマット
などの情報なので、通常は変更することはあまりありません。
5033:2001/07/13(金) 16:32
>>47
>各STEPでの途中経過として引き渡されるデータはこのように、
>形態で(これを一時データセット)定義することが出来ます。

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

の方が判りやすいですね。
一時データセットはWindows等でいうTEMPファイルと思ってください。
51PG初心者: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
                ↑これです。
本当に申し訳ございません。
5233: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を起動してしまうので、管理上はあまりお勧めしません。
5333: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度実行すると、次の世代に書いてしまったり、
大変なことになるので要注意。
(単純リラン可とか不可って聞いたことがあるかもしれません)
5433: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。
5933:2001/07/15(日) 14:48
>>28
そうですよね。
いたづらにDISP=OLDって指定しちゃうと、
デットロックとか起こりかねないし.....。
まぁ、DISPの指定を理解してIEFBR14(FやHでは〜DUMMYでしたっけ)
をちゃんと使えるようになるのが第一歩ですかねぇ。
60PG初心者:2001/07/16(月) 09:54
うーん今日からまた1週間が始まってしまった。
っと言うことでまたJCLのお勉強!!
>>33
本当にご親切にありがとうございます。

また質問すると思うのでそのときはよろしくお願いいたします。
61PG初心者:2001/07/17(火) 10:46
また質問です。
KEY=(1,1,C,(0)),FIELD=(419,1,C,(,A))
のKEY及びFIELD部分のカッコ内の意味を教えてください。
6233:2001/07/17(火) 14:08
う〜ん、これはJCLというよりも、
SYSINで与えるパラメータ(データ)に関する質問ですね。

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

結構、だらだらと書いてますが、特に親切って訳じゃないですから...。
この内容には、この文体のほうが書きやすいだけで、
他のスレでは、オマエモナーとか書いてたりするほうなんで、
あまり丁寧にレスしてくれなくてもいいっすよ。
6333:2001/07/17(火) 14:15
>>62
自己レスごめん
>419  バイトめの
>1   バイトのエリアに入っている
>C   つまりキャラクタを、
>A   昇順(アセンディング)に処理する
判りにくかったですね。
簡単に言うと同じフォーマットの大量データで、419バイト目に年齢が入っている
ようなケースで、年齢順にレコードを並べ替えたりするときに、ってこと。
まぁ、1バイトだから年齢ってのは無理があるかも知れないけど....。
64PG初心者:2001/07/18(水) 15:09
次の質問です。>>32の部分周辺の処理の意味がよく解りません。
誰か教えてください。
6533: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で良かったんじゃない
69PG初心者:2001/07/24(火) 10:51
//DD名 DD SYSOUT = 出力クラス
という説明に出力クラス”*”はMSGCLASSと同じ事を意味すると
書かれてたのですが、MSGCLASSって何のことでしょうか?
教えてください。
70PG初心者:2001/07/24(火) 16:43
>>69のこと誰か教えてくださ〜い
7133:2001/07/26(木) 09:15
>>69
MSGCLASSはJOB文に指定するパラメータで、
JOB実行結果出力の扱いを指定します。
英数字の指定が可能で、それぞれの意味は(JESの)システムパラメータ
に設定してあります。

例えば、Oクラスは実行後すぐにプリントされるとか、
Hクラスはホールド状態(リリースするとプリント)、
Aクラスはりリースされてもプリントされないとか、
の指定が可能です。
これを上手く使って、プリント仕分けとかを行ったりします。

例えば、JOBA、JOBB、JOBCの三つのJOBでの計算結果出力だけを、
いっしょにプリントしたいときなどに、その出力DDのSYSOUTのクラスを、
Kとしておきます。
保管用の出力は全てPクラスにし、緊急時のみプリントする(普段は不要)出力をD、
とします。
三つのJOBがきちんと終わったところで、(その三つのJOBの)Kクラスのものを、
出力用クラス(上の例だとOクラス)に変えてあげると、必要な計算結果だけが、
出力されます。
あとは、PクラスのものをHクラスに変更しておいて、プリンターが空いた時に、
リリースしてあげれば良い、というオペレーションが出来ます。
本当はもっと大規模なジョブをさばくために、色々と凝った設定をしていたり、
すると思いますが、出力結果をまとめて扱うためのものと思えばいいでしょう。

ここら辺は、あまり得意分野ではなかったので、
もしかしたら間違えがあるかもしれませんが、発見された方はご指摘ください。
72デフォルトの名無しさん:2001/08/25(土) 17:34
IBMと富士通のMSPのJCLって似てるよね!
MSPとXSPは富士通なのに全然違うのに・・
さらに三菱のJCLも全然違う・・
扱いが大変なんだよね!
73デフォルトの名無しさん:2001/08/25(土) 17:38
JCL出来る人って、プログラマーの部類に入るのでしょうか?
それともオペレーションに入るのかな?
74デフォルトの名無しさん:2001/08/25(土) 17:42
JCLって言語なの?
75デフォルトの名無しさん:2001/08/25(土) 23:40
JCL最高ぉ〜♪
76デフォルトの名無しさん:2001/08/26(日) 01:31
Job Control Language だろ?
77デフォルトの名無しさん:2001/08/26(日) 05:03
なるほど。
俺はユーザ側のシステム部にいたくせに
JCLなんてさっぱりわからないまま
転職してしまったけど、よくわかりました。
説明してくれた人ありがとう。
78デフォルトの名無しさん:01/08/26 11:55
JCLって、プログラムなの?
愚問で申し訳ない<(_ _)>
79デフォルトの名無しさん:01/08/26 13:39
>>78
ジョブを制御するための『言語』だよ。
「ジョブ」という概念からして普通の人には説明が必要だな。
81デフォルトの名無しさん:01/08/26 14:33
JCLって出来た方がいいのかな?
主にどんなことに使用できるの?
82デフォルトの名無しさん:01/08/26 14:45
>>79
たしかにJCLは言語だけれど、個別のプログラムの特性を熟知していないとダメ
なので、言語以外の部分の理解も不可欠ですね。単純に記述されたJCLと、シス
テム(OSも含む)を熟知し書かれたJCLとでは、パフォーマンスが10倍違うという
ことも少なくありません。
いずれにしても生きた化石だ
84デフォルトの名無しさん:01/08/26 17:45
COBOLとJCLってどっちが出来た方がいいの?

>生きた化石だ
JCLってCOBOLみたいに古い言語なの?
85デフォルトの名無しさん :01/08/26 21:41 ID:vmFgMi8s
>>84
必要に迫られていなければ、他の言語を勉強すべきだね。
86デフォルトの名無しさん:01/08/26 21:46 ID:UgfBg/w6
ダウンサイジングの波はまだ続いてます。
NTまでダウンする必要はないけど、
Solarisとそれの開発をやるほうがいいかもね>>84
87デフォルトの名無しさん:01/08/27 23:47 ID:iDbpn/rg
>84
COBOLとJCLとではJCLのが汎用性が高いと思われ。
ただ、言語の質が全く違うのでどうかな。
JCLはJOBを制御する言語なので、
どういうプログラムをどういう設定でどういう順番に流すかというのを指定する言語。
コレ単体で何かファイルを作るとかリストを作るとかはしない。

まあ、古いというかなんというか。
目の前にJCLやらCOBOLやらの仕事がないなら
勉強する必要はないと思われ。
ちなみに私の目の前にはJCLチェックリストが山盛りになっております。
勘弁してくれ。
88デフォルトの名無しさん:01/08/29 07:46 ID:suZHL6m2
やっぱ、仕事と密接に絡んでこないと、
本読んだだけの言語理解は理解したと言えないのかな?
89デフォルトの名無しさん:01/08/29 10:03 ID:7lq79nhk
>>72
>IBMと富士通のMSPのJCLって似てるよね!
当然です。真似をしたのですから。
(互換機を作って、互換OSを作ったともいう)
当時のOS/VS,MVSのコピーをしたはずです。
OSIV/F4 → OSIV/F4 MSP → MSP だったかな?

>MSPとXSPは富士通なのに全然違うのに・・
富士通がIBM互換機を始めた当初、それまでの富士通機の資産を
どう移行するかが問題でした。
それまでの「FACOM 230-XX」で使われていた「OSII/VS」のJCLは
あまりにも「MVS or OSIV/F4」のJCLと違った物でした。
そこで「OSII/VS」と互換の取れる「OSIV/X8」が作られました。
OSIV/X8 → OSIV/X8 FSP → XSP と変化してきました。

汎用機では、資産の継承が非常に大事にされます。
M$のように「あれは無かったことにしてくれ」とは言えないのです。

・・・F2(ESP)は消滅したけど・・・
(20数年の記憶をたどっているので、間違っていたらごめん)
90デフォルトの名無しさん:01/09/01 14:18 ID:w4tLKRkw
ACOSのJCLって、IBM・FACOMと似てますか?
91デフォルトの名無しさん:01/09/01 14:22 ID:CxsJK8mA
>90
VIS関連のJCLが良く分からん。
92デフォルトの名無しさん:01/09/02 18:41 ID:UHOWXA.Y
>>90
>ACOSのJCLって、IBM・FACOMと似てますか?
全然違います。

たしか、ハネウェルとACOS4が同じだったような気がします。
93デフォルトの名無しさん:01/09/04 22:33 ID:9IA.y9GY
メーカー提供のマニュアル見ながら作るしかないかな?
もしくは、雛型があると思うからそれをパクリまくる!
94デフォルトの名無しさん:01/09/05 08:39 ID:rayf.FWo
>雛型があると思うからそれをパクリまくる!
そうやって、無駄な動きをするJOBが増える。
数MBのSORTに数GBのSORTWORKを指定するとか・・・
いまどき、JCLしか知らないのは危険でしょうか?
不安だ・・
オペレーターの方がいいのかな?
いいスレですね。まったく知らなかった歴史の華をみた気がします。

http://dir.yahoo.com/Computers_and_Internet/Programming_Languages/JCL/
http://www.tuxedo.org/~esr/jargon/html/entry/JCL.html
JCLラーってどれくらいいるのだろう?
>>95
>>97
JCLだけ(又は専門)というのは、極めてまれだと思いますが。
99デフォルトの名無しさん:01/09/09 22:08
JCLエラー
100デフォルトの名無しさん:01/09/10 13:04
IBMのサイトにオンラインマニュアルがあったと思うが。

http://www-6.ibm.com/jp/manuals/library.html
101デフォルトの名無しさん:01/09/10 19:45
SYSTEM ABEND
102デフォルトの名無しさん:01/09/13 22:59
JCK
0C7
104デフォルトの名無しさん:01/09/15 17:41
>>103
例外処理?
105デフォルトの名無しさん:01/09/15 22:57
カラムがずれた?
106デフォルトの名無しさん:01/09/16 09:14
JCLの市場価値をもっとあげて欲しい。。
自分であげろ
JCL出来る人って、
SEっていうの?
>>104
(10進)データ例外、IBM系マシンのCOBOLerにはおなじみのエラー

>>108
冗談でしょ!
110デフォルトの名無しさん:01/09/18 19:56
MSGLEVEL とかって?
112デフォルトの名無しさん:01/09/19 00:48
JOB FAILED ,ABEND ,DUE TO ,S0C7 ,U0000
>>112
これは「***このスレ終了***」という、意味ですか?
114デフォルトの名無しさん:01/09/19 15:49
@RUN SBCOMP,******/******,UTIL$
@XQT SYS$LIB$*1100UTL.SBCOMP
@EOF
@SYM PRINT$,,PR
FではJCL書きは、メインフレームを担当することになった新人SE君の仕事です。
JCL新人に教えることになってるんだけど、
なんか気がのらないんだよね!

なんかその新人君が不敏でね。。
>>14 うに?!
118デフォルトの名無しさん:01/09/30 11:41
33って人、説明上手だなぁ・・・・age
JCLだけやってるんだけど!
これからはSPにでもなるしかないね!
120デフォルトの名無しさん:01/09/30 16:58
UN*XとかでJCLの変わりになるものってなにかありますか?
シェルスクリプトしか思いつかないんですけど、あれじゃ完全な代用にはなりませんよね?
121デフォルトの名無しさん:01/10/01 11:04
>>120
十分代用になるよ
うちのところでは、UNIXに以降したときシステムそのまま乗せ変えたところがある
そこでは、シェルスクリプトの中にJCLの注釈が入っていて、それに相当するスク
リプトが書いてあるし.......

JCLとシェルってまったく違うものだけど、JCL以上の事はできるでしょうねぇ
日経コンピュ−タに要員が,シェルスクリプトに適応できなくて
JCL互換のシェルを開発してしまったDQNな会社の話が載ってたYO!
>>122
面白すぎ、どの号に乗ってたか教えてちょ
124デフォルト名無しさん:01/12/06 00:38
このスレ、ちょい興味。U1000 age
125デフォルトの名無しさん:01/12/07 00:40
.を「ポチ」、#を「イゲタ」って読むのはホスト文化?
恥ずかしくて社外の人には言えないのだが。
日本のニュース番組でも、当初は.comを
ピリオドコムって言ってたよ。
複数の放送局の複数の穴が。
もちろんCNNとかは、
その頃からドットコムって言ってた。
アメリカ的でないとカッコ悪いというのは、
日本人の共通認識だよね。
ドットは今で言うピクセルのこと。
よって大きいフォントのピリオドはドットではない。
128デフォルトの名無しさん:01/12/07 02:42
正しくはピリオド
でもアメリカがドットなのに
ピリオドって言ったらカコワルイヨ
となったわけ
129デフォルトの名無しさん:01/12/07 13:27
>>114
おお、涙が出るほどなつかしい。
UNIVAC OS1100
JCL とは言わずに、ストリームとかいうような名前だった気がする。
ピリオドは文末記号。だからdotとは違うんだよ、う゛ぉけ
>>130 ハイフンとダッシュの違いを教えてください
ドットでもピリオドでも間違ってないよ。
134デフォルトの名無しさん:01/12/26 21:45
すいません。まったくの初心者でMSPコボルをやらなくてはならなくなり
困っています。プログラムのほうは追えるのですが、JCLがさっぱりです。
job制御言語のマニュアルはあって、それで勉強してるのですが、
載っていないものとかありまして、周りにそれを理解してる方がいなくて
書き込みました。
過去のLOGを見て勉強になることがいっぱいでわらをもすがる思いです。
質問ですが、以下の意味なのですが。
1.SYSIN DD ,SYSOUT DD で指定してあるファイル名と、PGで指定したFILE-CONTORL
のIN01,OUT01で指定してあるファイル名の違い。SYSIN,SYSOUTの意味がつかめ
ません。

2.SYSPRINT,STPRINの意味。

3.SYSOUT=*

以上のことなのですが、DD文の前に、SYSOUT,SYSPRINTがついて
SYSOUT DD SYSOUT=* などの文の意味がわかりません。

めちゃくちゃな質問文になってしまいましたが、どうかよろしくおねがいします
135デフォルトの名無しさん:01/12/26 22:00
>>134
JCLはACOSとIBMに近いやつを使っていたことがあります。
最初はとっつきにくかったのですが、特別に勉強した覚え
がありません。他のJCLを参考すれば誰でも書けるように
なります。
あなたの使うシステムに山ほど使用例があるはずですから
それを見てパターンを身に付けるのがいいと思います。
136デフォルトの名無しさん:01/12/26 23:45
>135そうですよね。いろいろ他のJCLをみたりしてるんですが、
どうも、上の質問のところが気になりまして・・・・。
教えていただきたいのですが。すいません
137猫好き ◆NuNaN3vQ :01/12/27 01:04
>>134
COBOLの「FD aaaa ASSIGN bbbb」の「bbbb」が
JCLの「bbbb DD DSN=〜」になるんでない?

会社行かないとハッキリしないのでsage(笑
138猫好き ◆NuNaN3vQ :01/12/27 01:13
>>134
>>137の続き

2.は、指定されていればシステムが使うところ。(だと思う)

3.「SYSOUT DD SYSOUT=*」
右側の「SYSOUT=*」は、出力するプリンタを指定するところ。
SYSOUT=*の「*」は、JOBステートメントの「MSGCLASS=x」の「x」が代入
されるよ。
左側の「SYSOUT」は、COBOLの「DISPLAY xxx UPON SYSOUT」と指定
した時にセットしておくDD文だよ。
139猫好き ◆NuNaN3vQ :01/12/27 12:30
>>137
COBOLで
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
  SELECT xxx ASSIGN yyy.

の yyy が、JCLの

yyy DD DSN=〜

に繋がるんだったスマソ
140デフォルトの名無しさん:01/12/28 00:29
猫好き様ありがとうございます。
理解できました。感謝です。
14133:01/12/28 15:18
久しぶりにこのスレを見かけたので来てみました。
なんかあったらまた質問に答えます。
でもCOBOLは判らないので、「猫好き」さんよろしく。
142 
アマゾンでJCLで検索しても洋書しか出てこない。