错误!未指定书签。
(2) 数字数组。 例如:
E EAR 128150 E EBH 2000 6 0 EBK 6 0 3. 所有的变量定义后使用前,都必须对变量进行初始化。
3.2.5. I表定义(RPG)
1. 所有的常量和变量都在I表中定义,禁止在程序处理的C表中定义变量。 2. 变量定义的顺序: (1) 字符常量。 (2) 字符变量。 (3) 数字变量。
(4) 组合变量,组合变量中的变量相对组合变量名要缩进两位书写。 例如:
IDS_STU DS 40 I 1 10 STINAM I 11 180STINUM I 19 210STIAGE 3. 所有的变量定义后使用前,都必须对变量进行初始化。
3.2.6. C表定义
1. C表定义顺序:
(1) 定义物理文件或逻辑文件的键值列表。 例如:
C VKL_TRC1 KLIST C KFLD VKS_BRH C KFLD VKS_MCH C KFLD VKS_SEQ (2) 定义参数列表。 例如:
C VPL_CKPN PLIST C PARM VPC_CRD C PARM VPC_PIN C PARM VPC_RTN
第 16 页 共 41 页
错误!未指定书签。
(3) 定义入口参数。 例如:
C *ENTRY PLIST C PARM VPC_CRD C PARM VPC_PIN (4) 程序处理。 2. 主程序结构:
过程名必须以SR#开头,在调用之前,对该过程的主要功能进行说明: * 参数初始化 C EXSR SR#INT * 主过程 C EXSR SR#MAIN * 程序结束 C EXSR SR#ENDP 3. 子过程:
在子过程BEGSR之前必须包含以下的说明:
***************************************************************** * 子过程名:SR#INT
* 功能描述:参数初始化
***************************************************************** C SR#INT BEGSR C*
C ENDSR
3.2.7. O表定义
禁止使用O表对报表进行定义,报表的定义统一采取外部文件表述方法,使用DDS来生成PRTF。
3.2.8. 循环嵌套
避免大量使用循环嵌套和条件嵌套,禁止使用GOTO语句。出现多个嵌套的时候,在第3列处标明各层嵌套的层次。 例如:
.....*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... * 1B C *IN90 DOW '0'
C* 2B C *IN91 IF '1' C - ?? C ?? 3B C *IN92 IF '1'
第 17 页 共 41 页
错误!未指定书签。
C ?? 3- C ELSE 3E C ENDIF 2E C ENDIF 1E C ENDDO
3.2.9. 数据区(Data Area)操作
1. 如果只是读取数据区的内容,则必须以不锁方式读取数据区。 2. 如果修改数据区的内容,则必须以锁方式读取数据区,在修改后解锁。 3. 以锁方式读取数据区,如果不符合修改条件,则用UNLOCK语句进行解锁。 例如:
D VDS_DTAR DS 100 D DA_FRDQ 1 10 D DA_TODQ 11 20 C*只是读取数据区内容
C *DTAARA DEFINE ATWDTQDTA VDS_DTAR
C IN *DTAARA C*修改数据区内容
C *DTAARA DEFINE ATWDTQDTA VDS_DTAR
C *LOCK IN *DTAARA 80 1B C *IN80 IF '0' C ??
C*修改条件判断
2B C Vc_CGDA IF '1' C*符合修改条件 C*赋值操作
C*修改数据区后解锁;如果修改数据区后还须加锁,则还需在因子1栏位填写“*LOCK”。 C OUT *DTAARA 2- C ELSE C*不符合修改条件
C UNLOCK *DTAARA 2E C ENDIF 1E C ENDIF
3.2.10. 数据文件操作
3.2.10.1.
注意事项
1. 禁止将*LOVAL和*HIVAL写到循环体。
2. 在程序中读取记录时,必须填写指示器(如CHAIN语句,须填写Hi指示器;READ类语句,须填
写Eq指示器),且根据指示器的值进行处理。
3. 对一个文件进行循环读取记录并进行普通处理,当读到A记录,需额外处理记录B时,则先将A
第 18 页 共 41 页
错误!未指定书签。
记录的键值(必须是唯一键值)保留到临时变量,若没有唯一键值可保留相对记录号RRN,通过另一个文件(必须有唯一键值)定位B记录进行处理,待处理B记录后,再通过保留A记录的键值定位回A记录。
4. 在修改记录和新增记录时,尽量填写指示器Lo,尤其对唯一键值文件新增记录时,必须填写。 5. 在以锁方式读取记录后,如果没有进行修改操作(UPDATE)或删除操作(DELETE),则必须进行
解锁操作(UNLOCK)。
6. 定义文件如果定义了关键字USROPN,那么通过OPEN语句打开文件时,必须填写指示器Lo,并通
过指示器Lo判断是否打开成功,在处理完毕后,必须使用CLOSE语句关闭文件。 7. 如果同时对多个文件进行更新操作时,才采用事务处理,否则不采用。
8. 声明的文件如果定义了 COMMIT 关键字,那么对其进行修改后,修改的记录在执行事务操作之前,
会一直保持锁定状态。锁定的记录越多,其它程序的执行效率将会越低,同时,当前进程在执行回滚操作时的时间就越长,应该在处理完一组完整的修改后就提交一次事务处理,避免处理完所有的修改后才提交事务处理,造成系统资源的浪费。
3.2.10.2.
符号:
操作处理
N:表示不锁记录,只能读取记录。 空:表示锁记录,可读取记录并修改记录。 语句 CHAIN{N} 说明 游标指到当前记录 指示器(Hi、Lo、Eq) Hi:表示是否查询到相应记录,查询不成功时,打开Hi指示器,必须填写。 Lo:查询时,记录是否被锁。记录被锁时,打开Lo指示器。 SETLL 只能读取记录 游标指向相应记录之前 Eq:当文件中有相应记录时,关闭EQ指示器。 一般与*LOVAL、READ或READE使用。 *LOVAL SETLL 表示游标指向所有记录之前。 SETGT 游标指向相应记录之后 第 19 页 共 41 页
一般与*HIVAL、READP或READPE使用。 备注 错误!未指定书签。 *HIVAL SETGT 表示游标指向所有记录之后。 READ{N} 游标指向下一条记录 Lo:读记录时,记录是否被锁。记录被锁时,打开Lo指示器。 Eq:表示是否读到记录,读成功时,关闭Eq指示器,必须填写。 READE{N} 游标指向下一条记录且键值相等 Lo:读记录时,记录是否被锁。记录被锁时,打开Lo指示器。 Eq:表示是否读记录,读成功且键值相等时,关闭Eq指示器,必须填写。 READP{N} 游标指向上一条记录 Lo:读记录时,记录是否被锁。记录被锁时,打开Lo指示器。 Eq:表示是否读到记录,读成功时,关闭Eq指示器,必须填写。 READPE{N} 游标指向上一条记录且键值相等 Lo:读记录时,记录是否被锁。记录被锁时,打开Lo指示器。 Eq:表示是否读到记录,读成功且键值相等时,关闭Eq指示器,必须填写。 READC 游标指向下一条修改记录 Lo:读记录时,记录是否被锁。记录被锁时,打开Lo指示器。 Eq:表示是否读到记录,读成功时,关闭Eq指示器,必须填写。 OPEN 打开文件 Lo:表示是否成功打开文件,不成功时,打开Lo指示器。 CLOSE COMMIT ROLBK
第 20 页 共 41 页
关闭文件 确认操作 回滚操作 只有执行COMMIT语句或ROLBK语句后才能正式解锁。