AS400程序员RPGIV培训手册 中级.pdf
AS/400 程序员培训手册 (中级) 作者 万一飞(Chinaunix网友胖有型) 目 录 1 简单说明 ................................................................................................................................... 5 2 程序代码行的编写 ................................................................................................................... 5 2.1 最简单的RPGLE程序 ............................................................................................ 5 2.2 举例准备 ................................................................................................................... 5 2.3 简单的程序流程 ....................................................................................................... 6 2.4 常见的程序流程 ....................................................................................................... 7 2.5 F行说明 ................................................................................................................... 8 2.5.1 内容说明 ........................................................................................................... 8 2.5.2 常用例子 ......................................................................................................... 11 2.5.3 补充说明 ......................................................................................................... 12 2.6 D行说明 ................................................................................................................. 12 2.6.1 内容说明 ......................................................................................................... 12 2.6.2 常用例子 ......................................................................................................... 15 2.6.3 补充说明 ......................................................................................................... 16 2.7 入口参数 ................................................................................................................. 16 2.8 C行说明 ................................................................................................................. 18 2.8.1 写在前面 ......................................................................................................... 18 2.8.2 内容说明 ......................................................................................................... 19 2.8.3 ILE操作码分类 .......................................................................................... 20 2.8.4 ILE操作码 ..................................................................................................... 21 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 3.1 LF(逻辑文件) .................................................................................................... 51 3.1.1 逻辑文件概念 ................................................................................................. 51 3.1.2 逻辑文件对效率的影响 ................................................................................. 53 3.2 MEMBER ............................................................................................................... 53 3.3 游标 ......................................................................................................................... 54 3.3.1 游标的概念 ..................................................................................................... 54 3.3.2 不同操作码对应的游标的处理 ..................................................................... 54 3.3.3 “有且仅有”的游标 ..................................................................................... 55 3.3.4 LOVAL、HIVAL对应的游标操作 ............................................................... 55 3.4 事务处理 -- COMMIT ........................................................................................... 56 3.4.1 概念描述 ......................................................................................................... 56 3.4.2 使用方法 ......................................................................................................... 56 3.4.3 注意事项 ......................................................................................................... 57 3.5 关于锁表的问题 LCKW ....................................................................................... 58 4 DEBUG调试以及常见出错信息 .......................................................................................... 58 4.1 写在前面 ................................................................................................................. 58 4.2 常规用法 ................................................................................................................. 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 4.3 跟踪批处理程序 From qingzhou ......................................................................... 62 4.4 常见的出错信息 ..................................................................................................... 62 4.4.1 编译程序时的出错信息 ................................................................................. 62 4.4.2 运行时的出错信息 ......................................................................................... 64 5 CL、 .............................................................................................................................. 64 5.1 CL程序 ................................................................................................................... 64 5.1.1 基本认识 ......................................................................................................... 64 5.1.2 CL程序的常用语法及命令 ....................................................................... 65 5.1.3 不常用的语法 ................................................................................................. 67 5.2 ....................................................................................................................... 68 6 屏幕文件及使用 ..................................................................................................................... 69 7 实用技巧 ................................................................................................................................. 74 7.1 数组 ......................................................................................................................... 74 7.1.1 简述 ................................................................................................................. 74 7.1.2 定义 ................................................................................................................. 74 7.1.3 初始化 ............................................................................................................. 75 7.1.4 使用方法 ......................................................................................................... 75 7.1.5 补充 ................................................................................................................. 76 7.2 结构体 ..................................................................................................................... 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 7.3 按内部序号来读文件 ............................................................................................. 80 7.3.1 简述 ................................................................................................................. 80 7.3.2 定义 ................................................................................................................. 81 7.3.3 使用方法 ......................................................................................................... 81 7.4 常驻内存命令SETOBJACC ................................................................................. 83 7.4.1 简述 ................................................................................................................. 83 7.4.2 命令说明 ......................................................................................................... 83 7.4.3 使用说明 ......................................................................................................... 84 7.4.4 补充说明 ......................................................................................................... 84 7.5 数据队列的使用 ..................................................................................................... 84 7.5.1 数据队列的说明 ............................................................................................. 84 7.5.2 CRTDTAQ 建立数据队列 ............................................................................. 85 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 7.6 使用系统API的入手方法 .................................................................................... 87 7.6.1 调用说明 ......................................................................................................... 87 7.6.2 关于USR SPACE ........................................................................................... 88 7.6.3 一些可能常用的API ..................................................................................... 88 8 其它......................................................................................................................................... 89 8.1 报表打印 ................................................................................................................. 89 8.2 SQLRPGLE ............................................................................................................ 93 8.3 SAVF,备份与恢复 ............................................................................................... 95 8.4 菜单--MENU .......................................................................................................... 96 8.5 实用命令 ................................................................................................................. 96 8.6 关于代码风格的几点想法 ..................................................................................... 99 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程序 CL0N01Factor1OpcodeExtFactor2ResultLenDHiLoEq *************** 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 READ FMTFHS C FHS01”01” C UPDATE FMTFHS C SETON LR C RETURN 这个程序的意思,是说读PFFHS这个文件,然后将读到的第一条记录中的FHS01这个字段的值修改为“01”。 “SETON LR”,LR的位置可在HI、LO、EQ中任选一处。意思是指将打开指示器*INLR,即赋值使指示器*INLR的值等于1。等价于 “ *INLR’1’ ”,意思是强制将内存中的数据写到磁盘中。(基于效率因素,系统在修改文件时,会先将修改的结果先放在内存中,在同一程序中,读取数据也是先从内存中查询。)LR,取自是Last Record RETURN,表示程序结束,在后面“操作码”一节中,会有讲述。 如果不太明白,就记住 C SETON LR C RETURN 或 C *INLR’1’ C RETURN 这两句话加在一起,表示程序结束就可以了。 从这个程序中,我们可以看到,RPGLE的程序,大致上可以分为两个部分 1、 声明、定义部分声明程序中使用到的文件(F行),定义程序中使用的变量(D行) 2、 程序运行部分 即C行,也就是程序段。 在RPGLE程序中,F行必须在D行前面,D行必须在C行前面。 程序执行的起始顺序,将从定义部分之后,第一个C行开始,顺序向下执行。 程序中的F行、D行都不是必须项,一个程序可以没有F行(如仅完成计算功能的公共函数,比如计算利息),也可以没有D行(没有需要特别定义的变量,或者所有变量都在C行进行定义),但不应该没有C行,因为F行与D行都属于非执行行,是起定义作用;C行是执行行。没有C行的程序,是无执行意义的。 2.4 常见的程序流程 FPFFHS UF E DISK //声明文件PFFHS D LSFLD01 S 2 //定义临时变量LSFLD01 C LSFLD01’01’ //给变量LSFLD01赋值 C EXSR SUBUPD //执行子过程SUBUPD C LSFLD02’02’ //给变量LSFLD02赋值 C EXSR SUBUPD //执行子过程SUB#UPD C SETON LR //数据写入磁盘 C RETURN //程序结束 C SUBUPD BEGSR //子过程SUBUPD开始 C READ FMTFHS //读PFFHS文