Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 操作系统 > 其他操作系统 > AS/400开发经验点滴(七)--在RPG程序中巧用相对记录号RRN
【标  题】:AS/400开发经验点滴(七)--在RPG程序中巧用相对记录号RRN
【关键字】:AS/400,RPG,RRN
【来  源】:http://www.cublog.cn/u/2405/showart.php?id=106083

AS/400开发经验点滴(七)--在RPG程序中巧用相对记录号RRN

Your Ad Here
AS/400开发经验点滴(七)

BLOG LIOU


十.在RPG程序中巧用相对记录号RRN

1.        RRN

正像INFORMIX数据库有记录号ROWID,AS/400的PF文件的记录也都有一个隐含的记录号RRN。RRN是Relative-Record Number的缩写,也就是相对记录号,有时俗称记录“物理地址”。当向PF文件中增加记录时,每条记录都被赋上了一个RRN。在PF文件属性中有一个“Reuse deleted records”属性,表示是否重复使用删除记录的RRN,可以用CHGPF来修改该属性,如果该属性指定为*NO,那么新加的记录就只会追加到文件尾部,RRN号则顺序加1,如果删除一条记录,那么该条记录的RRN号仍会被保留,即记录空间不会被释放,那么文件就会一直增长,可以通过文件重组来重新排序RRN号。如果“Reuse deleted records”属性指定为*YES,那么被删除记录RRN号可以被重复利用,在新增加记录时,会优先查找以前是否有被删除的记录,如果有,就会把先前的RRN号赋给新增加的记录。

同时,RRN还是SQL保留字,可以在SQL语句中使用,比如下例就可以看到RRN号:

SELECT RRN(TESTPF), FLD1, FLD2, FLD3  FROM BLOG/TESTPF


2. RPG中使用RRN

在RPG程序中,同样可以使用RRN。巧用善用RRN,有时候还具有意想不到的效果。

对没有键值的文件就可以根据相对记录号RRN,来连续或随机处理。RRN号也可以在SETLL、SETGT、CHAIN操作码中使用。要在RPG程序中使用RRN,必须在文件定义中指定RECNO关键词。RECNO关键词就表示DISK类文件是按照相对记录号(RRN)来处理的。RECNO可以在INPUT/UPDATE类文件上指定,提取的相对记录号会放在RECNO关键词括号内定义的一个字段内,该字段名可以自己定义,类型必须定义成数字类型,定义的长度应该足够放下提取的记录号长度。关键值RECNO和BLOCK(*YES)不能同时在同一个文件上定义。而且文件定义的34位必须为空,通常有键值的文件该位会被填K。使用了RECNO关键词,ILE RPG编译器不允许记录块读写(RECORD BLOCKING),但如果文件仅仅是输入文件,而且设置快速顺序访问(用OVRDBF指定SEQONLY(*YES)),那么块读写仍然被允许。

比如文件定义:

FTESTPF    IF   E             DISK    RECNO(RRNO)

定义字段RRNO:

DRRNO                            9P 0 INZ(0)

定义了相对记录号存放的RRNO字段后,就可以在RPG程序中使用相对记录号了。在读写每条记录时,都会返回该记录的RRN号。


3.使用RRN优化处理大文件的例子

下面举一例,看看如何使用RRN来优化处理大文件。假设有一个数据量为海量的大文件,需要对其顺序处理。通常我们会想到把该大文件拆分成若干小文件,然后对若干小文件进行并行处理。但把海量大文件拆分成若干小文件也需要耗去可观的时间,能不能不用对海量大文件进行拆分,就可以对该文件进行分段并行处理呢?使用RRN就可以做到。

具体办法:
(1)        首先在RPG程序的文件定义中定义RECNO关键词以及定义存放RRN号的字段。
(2)        在RPG程序中指定分段的开始和结束RRN号。
(3)        用开始RRN号和SETLL语句来定位分段的开始位置
(4)        用读写记录返回的RRN号,来与分段结尾RRN号比较,当读写记录返回的RRN号大于分段结尾RRN号时,该段处理结束,程序返回。
(5)        再编一个调用的RPG或CL的程序,指定若干个连续的分段,并用提交方式调用被调用的分段处理的RPG的程序,就可以完成海量文件的分段并行处理。

示范程序源码如下:

     FTESTPF    IF   E             DISK    RECNO(RRNO)
     ………….
     DRRNO                            9P 0  INZ(0)
     ………….
     C     *ENTRY     Plist
     C                      Parm                    BEGNO            10 0
     C                      Parm                    ENDNO            10 0
     ………….
     C     BEGNO      SETLL    TESTPF
     C                      DOW     1=1
     C                      READ    TESTPF                                31
     C     *IN31        IFEQ      '1'
     C                      LEAVE
     C                      ENDIF
     ……………
    C                      IF        RRNO >; ENDNO
     C                      LEAVE
     C                      ENDIF
     ……………
     C                      ENDDO  
     …………….
2004.11.30

AS/400开发经验点滴(八)--使用共享文件打开提高软件性能:【上一篇】
AS/400开发经验点滴(五)--通用日志管理工具:【下一篇】
【相关文章】
  • AS/400开发经验点滴(八)--使用共享文件打开提高软件性能
  • AS/400开发经验点滴(九)--SPECIAL文件的使用
  • 新网游黄金时代3D MMORPG席卷2006
  • 根据屏幕文件生成RPG代码的思路
  • 获取RPG源代码
  • 新作MMORPG「Arch Lord 韩国公测测试报告上篇
  • 新作MMORPG「Arch Lord 韩国公测测试报告下篇
  • RPG制作之路(ZT)
  • 尽可能的使用全局变量errno来判断状态
  • Can't create table ****** (errno: 121)的解决方法
  • 【随机文章】
  • ASP内建对象Server
  • WEB应用的缓存兼容性设计
  • 在.NET中轻松获取系统信息(1) -WMI篇
  • Oracle 归档与非归档的切换
  • 对话框的过程函数
  • 动态地址Site-to-Site VPN
  • 确认远程文件删除
  • 系统分析设计 一个JOIN问题解决方案的感想 重视业务分析设计
  • 顶级网页配色词典,培养你的色感
  • 提升Web Services性能原来不是通过传说中的压缩Soap请求和响应消息来实现的
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.