logo资料库

AS400程序员培训手册(中级).pdf

第1页 / 共100页
第2页 / 共100页
第3页 / 共100页
第4页 / 共100页
第5页 / 共100页
第6页 / 共100页
第7页 / 共100页
第8页 / 共100页
资料共100页,剩余部分请下载后查看
AS/400 程序员培训手册 (中级) 作者: 万一飞(Chinaunix 网友:胖有型)
目 录 2.6  2.7  2.8  2.1  2.2  2.3  2.4  2.5  1  简单说明 ................................................................................................................................... 5  2  程序代码行的编写 ................................................................................................................... 5  最简单的 RPGLE 程序 ............................................................................................ 5  举例准备 ................................................................................................................... 5  简单的程序流程 ....................................................................................................... 6  常见的程序流程 ....................................................................................................... 7  F 行说明 ................................................................................................................... 8  2.5.1  内容说明 ........................................................................................................... 8  2.5.2  常用例子 ......................................................................................................... 11  2.5.3  补充说明 ......................................................................................................... 12  D 行说明 ................................................................................................................. 12  2.6.1  内容说明 ......................................................................................................... 12  2.6.2  常用例子 ......................................................................................................... 15  2.6.3  补充说明 ......................................................................................................... 16  入口参数 ................................................................................................................. 16  C 行说明 ................................................................................................................. 18  2.8.1  写在前面 ......................................................................................................... 18  2.8.2  内容说明 ......................................................................................................... 19  ILE 操作码分类: .......................................................................................... 20  2.8.3  ILE 操作码 ..................................................................................................... 21  2.8.4  2.8.4.1  A--C ......................................................................................................... 21  2.8.4.2  D--E .......................................................................................................... 29  2.8.4.3  F--N .......................................................................................................... 34  2.8.4.4  O--R ......................................................................................................... 41  2.8.4.5  S--Z .......................................................................................................... 45  3  和程序相关的数据库知识 ..................................................................................................... 51  LF(逻辑文件) .................................................................................................... 51  3.1.1  逻辑文件概念 ................................................................................................. 51  3.1.2  逻辑文件对效率的影响 ................................................................................. 53  MEMBER ............................................................................................................... 53  游标 ......................................................................................................................... 54  3.3.1  游标的概念 ..................................................................................................... 54  3.3.2  不同操作码对应的游标的处理 ..................................................................... 54  3.3.3  “有且仅有”的游标 ..................................................................................... 55  LOVAL、HIVAL 对应的游标操作 ............................................................... 55  3.3.4  事务处理 -- COMMIT ........................................................................................... 56  3.4.1  概念描述 ......................................................................................................... 56  3.4.2  使用方法 ......................................................................................................... 56  3.1  3.2  3.3  3.4 
3.5  4.3  4.4  4.1  4.2  3.4.3  注意事项 ......................................................................................................... 57  关于锁表的问题 LCKW ....................................................................................... 58  4  DEBUG 调试以及常见出错信息 .......................................................................................... 58  写在前面 ................................................................................................................. 58  常规用法 ................................................................................................................. 59  4.2.1  程序编译 ......................................................................................................... 59  4.2.2  执行 DEBUG 命令 ......................................................................................... 59  4.2.3  运行程序 ......................................................................................................... 59  4.2.4  在 DEBUG 模式中进行调试 ......................................................................... 60  4.2.5  跟踪被当前程序调用的程序 ......................................................................... 60  4.2.6  一定要退出 DEBUG 模式 ............................................................................. 61  4.2.7  补充 ................................................................................................................. 61  跟踪批处理程序( From qingzhou) ......................................................................... 62  常见的出错信息 ..................................................................................................... 62  4.4.1  编译程序时的出错信息 ................................................................................. 62  4.4.2  运行时的出错信息 ......................................................................................... 64  5  CL、CMD .............................................................................................................................. 64  CL 程序 ................................................................................................................... 64  5.1.1  基本认识 ......................................................................................................... 64  5.1.2  CL 程序的常用语法及命令: ....................................................................... 65  5.1.3  不常用的语法 ................................................................................................. 67  CMD ....................................................................................................................... 68  6  屏幕文件及使用 ..................................................................................................................... 69  7  实用技巧 ................................................................................................................................. 74  数组 ......................................................................................................................... 74  7.1.1  简述 ................................................................................................................. 74  7.1.2  定义 ................................................................................................................. 74  7.1.3  初始化 ............................................................................................................. 75  7.1.4  使用方法 ......................................................................................................... 75  7.1.5  补充 ................................................................................................................. 76  结构体 ..................................................................................................................... 76  7.2.1  简述 ................................................................................................................. 76  7.2.2  结构体的定义 ................................................................................................. 77  7.2.3  初始化 ............................................................................................................. 77  7.2.4  使用方法 ......................................................................................................... 78  7.2.5  结构体中的数组 ............................................................................................. 79  7.2.6  定义时,独立变量与结构体变量的区别 ..................................................... 79  7.2.7  不带 OCCURS 关键字的结构体定义 ........................................................... 80  按内部序号来读文件 ............................................................................................. 80  7.3.1  简述 ................................................................................................................. 80  7.3.2  定义 ................................................................................................................. 81  7.3.3  使用方法 ......................................................................................................... 81  常驻内存命令 SETOBJACC ................................................................................. 83  7.4.1  简述 ................................................................................................................. 83  5.2  7.1  5.1  7.2  7.3  7.4 
7.5  7.6  7.4.2  命令说明 ......................................................................................................... 83  7.4.3  使用说明 ......................................................................................................... 84  7.4.4  补充说明 ......................................................................................................... 84  数据队列的使用 ..................................................................................................... 84  7.5.1  数据队列的说明 ............................................................................................. 84  CRTDTAQ 建立数据队列 ............................................................................. 85  7.5.2  7.5.3  DLTDTAQ 删除数据队列 ............................................................................. 85  7.5.4  系统 API ......................................................................................................... 86  7.5.4.1  QSNDDTAQ 发送数据队列 ................................................................ 86  7.5.4.2  QRCVDTAQ 接收数据队列 ................................................................ 86  7.5.4.3  QCLRDTAQ 清除数据队列 ................................................................ 87  7.5.4.4  QMHQRDQD 检索数据队列 ................................................................ 87  使用系统 API 的入手方法 .................................................................................... 87  7.6.1  调用说明 ......................................................................................................... 87  7.6.2  关于 USR SPACE ........................................................................................... 88  7.6.3  一些可能常用的 API ..................................................................................... 88  8  其它......................................................................................................................................... 89  报表打印 ................................................................................................................. 89  SQLRPGLE ............................................................................................................ 93  SAVF,备份与恢复 ............................................................................................... 95  菜单--MENU .......................................................................................................... 96  实用命令 ................................................................................................................. 96  关于代码风格的几点想法 ..................................................................................... 99  8.1  8.2  8.3  8.4  8.5  8.6 
1 简单说明 RPG 的全称:Report Program Generator 内部交流、亦可作培训使用。对用户作如下假定: 1、 能 COPY、修改、编译源代码(RPGLE、CLP),并能运行编译后的程序 2、 能 COPY、修改、编译文件(PF、LF、PRTF、DSPF); 3、 对数据文件(PF)有简单的认识(FIELD RECORD PF),并知道 LF 与 PF 的 对应关系。 2 程序代码行的编写 2.1 最简单的 RPGLE 程序 为便于理解,这里写一个最简单的 RPGLE 程序 CL0N01Factor1+++++++Opcode&ExtFactor2+++++++Result++++++++Len++D+HiLoEq *************** Beginning of data ************************************* 0001.00 C 'HELLO WORLD' DSPLY 0002.00 C RETURN ****************** End of data **************************************** 这个程序编译成功,并调用(CALL 程序名),就是在屏幕上反白显示“HELLO WORLD”字样。(其中,绿色字样,是系统自动显示的,下同) 与自由风格的 C 语言不同,RPGLE 中的编码,是有一定的格式,如果写错,将会在当 前代码行上高亮反绿显示。初学者如果不太清楚从何处开始下手,可以使用“F4”键查看 (F4 键只有用 2 进入的编辑状态才有效,用 5 进入的查看状态是无效的) Level N01 Factor 1 Operation Factor 2 Result 'HELLO WORLD' DSPLY Decimal Length Positions HI LO EQ Comment 关于每一项所对应的内容代表什么意思,该如何填写,即如何写程序,将会在下面的具 体讲解。 2.2 举例准备 列出表名,字段,以方便下面的举例。
假设有 PF 文件叫 PFFHS,文件的记录格式叫 FMTFHS 每条记录,都是由 FHS01、FHS02、FHS03 三个字段组成,每个字段都是两位长的字符 型变量。 逻辑文件 PFFHSL1 的键值为 FHS01 逻辑文件 PFFHSL2 的键值为 FHS02 逻辑文件 PFFHSL3 的键值为 FHS01、FHS02 注: 文件的记录格式,可以理解为给这个文件整条记录起的一个名字;或者是说将每条记录 视都视做一个类型相同大变量,然后给这个大变量起的名字。所以文件的记录格式信息中, 包含有一条记录由多少个字段组成,总计长度是多少这样的信息。 文件的记录格式,与各个字段同时定义。(写文件的源码时) 文件的记录格式在 RPGLE 的程序中,不能与文件名相同。 2.3 简单的程序流程 为方便起见,系统自动显示的就不再贴出来了,只贴代码段。 FPFFHS UF E DISK C C C C C 这个程序的意思,是说读 PFFHS 这个文件,然后将读到的第一条记录中的 FHS01 这个 FMTFHS FHS01=”01” FMTFHS READ EVAL UPDATE SETON RETURN LR 字段的值修改为“01”。 “SETON LR”,LR 的位置可在 HI、LO、EQ 中任选一处。意思是指将打开指 示器*INLR,即赋值使指示器*INLR 的值等于 1。等价于 “ EVAL *INLR=’1’ ”, 意思是强制将内存中的数据写到磁盘中。(基于效率因素,系统在修改文件时,会先将修改 的结果先放在内存中,在同一程序中,读取数据也是先从内存中查询。)LR,取自是 Last Record LR C C C C SETON RETURN RETURN,表示程序结束,在后面“操作码”一节中,会有讲述。 如果不太明白,就记住 或 这两句话加在一起,表示程序结束就可以了。 从这个程序中,我们可以看到,RPGLE 的程序,大致上可以分为两个部分: 1、 声明、定义部分:声明程序中使用到的文件(F 行),定义程序中使用的变量(D 行) 2、 程序运行部分 :即 C 行,也就是程序段。 EVAL RETURN *INLR=’1’
在 RPGLE 程序中,F 行必须在 D 行前面,D 行必须在 C 行前面。 程序执行的起始顺序,将从定义部分之后,第一个 C 行开始,顺序向下执行。 程序中的 F 行、D 行都不是必须项,一个程序可以没有 F 行(如仅完成计算功能的公 共函数,比如计算利息),也可以没有 D 行(没有需要特别定义的变量,或者所有变量都在 C 行进行定义),但不应该没有 C 行,因为 F 行与 D 行都属于非执行行,是起定义作用;C 行是执行行。没有 C 行的程序,是无执行意义的。 2.4 常见的程序流程 FPFFHS UF E DISK D LSFLD01 LSFLD01=’01’ C SUB#UPD C C LSFLD02=’02’ SUB#UPD C C C C SUB#UPD FMTFHS C FLD01=LSFLD01 C C FMTFHS C “//”后面的,只是简单的解释,如果自已动手写,不需要输入这些内容。 系统在运行这个程序时,是按如下的顺序来执行: S EVAL EXSR EVAL EXSR SETON RETURN BEGSR READ EVAL UPDATE ENDSR //声明文件 PFFHS //定义临时变量 LSFLD01 //给变量 LSFLD01 赋值 //执行子过程 SUB#UPD //给变量 LSFLD02 赋值 //执行子过程 SUB#UPD //数据写入磁盘 LR //程序结束 //子过程 SUB#UPD 开始 //读 PFFHS 文件 //给字段 FLD01 赋值 //修改文件 //子过程结束 2 1. 首句 EVAL 赋值语句,直接执行; 2. 当系统发现操作码“EXSR”时,根据后面的变量名“SUB#UPD”,去查找对应的 “SUB#UPD BEGSR”语句; 3. 然后从“SUB#UPD BEGSR”之后,顺序向下执行,直至“ENDSR”语句 4. 执行到“ENDSR”之后,将会再回到当初的“EXSR SUB#UPD”处,继续向下 执行,直到 RETURN 语句为止 这里提出一点要注意,如果子过程中,又执行了自身,即在 SUB#UPD 程序中,又出现 了“EXSR SUB#UPD”,是可以编译通过的,但在执行过程中,系统会因为无法定位, 而出现死循环,直至报错异常中断退出。也就是 RPGLE 的程序中,子过程不允许出现递归。
2.5 F 行说明 2.5.1 内容说明 首位填上 F,然后按 F4,会出现如下内容: File File End of File Filename Type Designation File Addition Sequence File Record Limits Length of Record Format Length Processing Key Field Address Type File Organization Device Keywords Comment 各项的含义分别是: Filename: 需要声明的文件名,必须顶格,文件名必须唯一,也就是程序中对同样的文件名不能声 明两次。 File Type: 声明文件的处理类型。必须填写。允许的选项有: I: 输入型,即只读文件,对声明的文件只取其记录的值,不对记录进行修改 U: 修改型,即对声明的文件进行修改操作(删除记录属于修改操作的一种) O: 输出型,即只写,对声明的文件只进行写操作。 C:混合型,用于对屏幕文件的定义。(混合型,即输入/输出型,以屏幕文件为例,也 就是读取屏幕文件的一些输入字段信息,同时也可以输出一些字段的值到屏幕文件中,但不 能对屏幕文件自身进行修改,所以与上面的 U 是有区别的) File Designation: 文件的指定方式,允许的选项有: 不填:表示这是一个输出文件,即“File Type”项为“O”时,此项不填 简单来说,不考虑 cycle(循环控制),这样理解就够了: P:表明声明的文件是主文件,这个很少用,cycle 相关 S:表明声明的文件是次文件,这个没用过,cycle 相关 R:Record address file,记录地址文件?没用过 T:数组或表文件?不懂,没用过 F:常用,具体含义不知道该如何翻译(Full procedural file) 当“File Type”为 I,U,C 时,这里填“F” 当“File Type ”为 O 时,这里不填写 End of File: 程序结束前,对记录的处理方式。可以不填,或填“E”。但从英文解释上来看,不敢
分享到:
收藏