COBOL程序典型结构
一个典型的COBOL程序结构是:程序由许多‘部’组成,每个‘部’可以包含多个‘节’
COBOL PROGRAM (程序)
DIVISION(部)
SECTION(节)
PARAGRAPH(段)
SENTENCE(句子)
STATEMENT(语句)
整个COBOL程序由4个'部'(DIVISION)组成:
Identification Division 标识部 Environment Division 环境部 Data Division 数据部 Procedure Division 过程部
用一句话介绍这四个部:标志部提供作者和编译器信息;环境部提供程序运行的环境;数据部描述程序处理的绝大部分数据;过程部描述对数据部描述的数据的操作算法:
Identification Division(标识部)--主要是程序和作者名
IDENTIFICATION DIVISION.
PROGRAM-ID ...
提交JCL的4种方式
总结了下在主机上面提交JCL的四种方式:
1.用VIEW或者EDIT打开JOB,在命令行上输入SUBMIT
或者SUB
:
2.直接在JOB前面输入SUBMIT
或者SUB
,不用打开:
3.命令行模式下输入命令:
4.Q;ST
进入SDSF,找到你最近run过的JOB,在它前面输入SJ
,回车,输入SUB
,提交job。
more ...
utility判断dataset是否为空的方法
下面介绍四种利用Utility的返回码来判断一个dataset或者member是否为空文件的方法:
1.利用IDCAMS
2.利用SORT(DFSORT/SYNCSORT)
3.利用ICETOOL(SYNCTOOL)
4.利用ISRSUPC
方法不止以上四种,还有利用REXX
脚本也可以判断,只是不属于本文讨论的范围。
IBM Debug Tool使用
关于IBM DebugTool
的一些介绍,请参照我的另一篇博文:<IBM Debug Tool
来调试PL/I
或者COBOL
程序的时候都有哪些命令或者说按键可以用,比如说设置断点,运行至断点处,监视变量值啊什么的这种一般不管什么程序的调试都会用到的知识。当然,这本身很简单,写在这里只是为了让新人更快的学会使用,基本上10分钟搞定的那种,这样就节省了大家的时间了。
先上个IBM DebugTool
的截图:
可以看到,最上面一行显示了当前debug的程序名字PRGM002以及所用的语言PL/I
,接着是命令行COMMAND,所有的调试命令都在这一行输入。然后是变量监视区域(MONITOR)
,源程序区(SOURCE)
以及调试日志(LOG)
区域。Debug Tool
遵循“七上八下”原则,也就是F7向上翻页,F8向下翻页。
执行下一条语句
按 ...
more ...IBM File Manager for z/os 续(一)
上一次我简单介绍了下大机平台上的一个强大的文件查看/编辑工具,这里我要介绍几个在用FileManager
查看/编辑 QSAM顺序文件的时候的小技巧。
上图显示的是employee的信息文件,比较小,只有几条记录。但是一般在生产环境上,数据都有好几百万条,如果你很傻的直接FIND 关键字来查找,那么抛开CPU耗费不说,你自己也将耗费很长的一段时间来等待搜索结果出来,所以,看看这篇文章,学会几个*File Manager*
的使用技巧还是有必要的(如果你没功夫去看IBM红宝书的话)。
1、只查找指定字段(Field)
例:只在ACCT字段查找关键字“IT”
命令: F IT #6
(可以把#6看成ACCT的别名)
例:只在ACCT字段和EP_NAME字段查找关键字"IT"
命令: F IT #6 #8
2、只查找指定几列 (Column)
例:只在第8至20列查找关键字"AN"
命令 ...
more ...Debug Tool for z/OS
作为一个PL/I、COBOL程序猿,调试程序是必须的一项技能。这里我来说说大机上面的调试工具IBM的DebugTool,它支持的环境包括BATCH, TSO, CICS, DB2, DB2存储过程以及UNIX等等。
这篇我来说说如何设置让程序可以被Debug
首先,你必须在编译程序的时候需要选择以Debug模式编译,这个在changeman里面直接在编译的时候选个IBM Debug Tool="Y"
就可以了。
接着,如果是BATCH的,就需要在JCL的PARM中指定TEST运行时的参数,通过VTAM接口来初始化debug模式,VTAM%后面跟着的是userid,就像这样:
是BATCH的话,你还要有一个Debug的session,这个可以参照我的另外一篇博文:<<登陆大型机——Aviva的介绍>>,只需注意在建debug session的时候destination的IP一般和普通大机的物理ip是不一样。填上正确的ip,然后用你的id登陆,这里我的id是IBMUSER,须跟上面设置的一样。
回到JCL这边,submit,那恭喜你,你就可以看到Debugtool的画面了:
但是,如果程序是ONLINE的话,一般我们用CICS上面的DTCN这个工具来debug的。这里我假设你已经在上面“首先”里面正确编译了一个ONLINE的程序PRGM002 (带debug编译选项的)。然后,你登陆CICS ...
more ...IBM File Manager for z/os
IBM的File Manger
在大机平台上是非常强大的文件查看/编辑器,是一个强大的ISPF应用程序。这里先贴上一张IBM2011年最新的关于File Manger的结构图,我认为这张图很好地诠释了File Manager 的强大之处:
[图片来源于IBM官方网站,仅供学习交流之用]
参照上图,我这里要讲的是当中的第二块内容——File Manager for Z/OS
,关于其它部分如File Manager for DB2
,File Manager for IMS
和File Manager for CICS
,以后再说。(其实更主要是因为平常工作做我用for z/os用的多,db2和cics的用得少,不敢在这瞎说。)。基本的操作原理就不说了,我就说说我在平常工作当中的几个有用的小技巧好了。 以查看/编辑QSAM
(sequential)的dataset为例,选项1是查看(View),选项2是编辑 ...
mainframe访问磁带(Tape)
大机上磁带(tape)一般用来存储大容量的数据的,可以降低成本。我们要访问tape中的数据的时候,一般的做法是用JCL将tape中的记录转存到直接存储访问设备(DASD)中再查看。 下图中,我们通过utility ICEMAN
将IBMUSER.DNS.TAPE
这个tape中的所有记录都转存到IBMUSER.TAPE.TO.DASD
中,这样就能查看了。
不过,需要注意的是,tape里面的数据量一般都很大,所以更多时候我们再用的时候会指定读取的record的数目,比如这里我们指定读取100条:
甚至,你还可以用SORT中的语法筛选出你想要的条件。比如(1,4,EQ,'AAAA')
这样子。
用ISRSUPC在PDS所有member中搜索指定字符串
在一个PDS中搜索名字叫做“snailgo”的member,可以在command line上输入命令mem snailgo
即可。但是,如果想搜索整个PDS下所有的成员(Member)中指定字符串,有没有办法呢?答案是肯定的,我们可以用一个比较的utility ISRSUPC
来实现,同样的,只需submit一个JCL。
这里,我们在PDS “IBMUSER.TEST.LIB.JCL”
和“IBMUSER.TEST.LIB.PROC”
下的所有member中搜索字符串”SNAILGO”。参数为:PARM=(SRCHCMP,ANYC)
,其中SRCHCMP
指定要搜索的字符串,ANYC
表示ANY Case,即搜索任何符合的情况,要了解更详细的PARM的用法,可以参考IBM红宝书IBM manual ISPF/PDF Guide ...
新建空的GDG generation
有时候你不希望GDG的当前generation里面有数据,但GDG又不能没有generation,否则JCL会提示找不到dataset。这时候你可以用IBM的IEFBR14
utility来生成一个空的generation。IEFBR14
它实际上什么也不做的空程序,常常被我们用来生成空的FILE。不只是gdg,普通的dataset也可以生成。
submit,查看,空的generation G0001V00 就生成了:
more ...