Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1083313
  • 博文数量: 106
  • 博客积分: 9093
  • 博客等级: 中将
  • 技术积分: 2770
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-01 17:22
文章分类

全部博文(106)

文章存档

2014年(1)

2012年(29)

2011年(32)

2010年(20)

2008年(24)

分类:

2008-05-30 14:11:02

在400中我们都知道有个多MEMBER的概念。如何取得多MEMBER中的数据,就要用到OVRDBF这个命令。
OVRDBF命令的功能是:
(1) 覆盖 ( 替换 ) 在程序中命名的文件
(2) 覆盖程序中使用的文件的一些参数
(3) 覆盖在程序中命名的文件和覆盖被处理文件的一些参数。
 
这个命令可用于物理文件、逻辑文件和分布式数据管理 (DDM) 文件。 
 

OVRDBF有以下几种用法:

1,程序用多MEMBER。

大多是CL中用OVRDBF,然后在CL中调用RPG。如:

OVRDBF XXDB1  YOURLIB/XXXDB

2,FTP用,通常如下:

OVRDBF     FILE(INPUT) TOFILE(INPUT) MBR(XXXI)  
OVRDBF     FILE(OUTPUT) TOFILE(OUTPUT) MBR(XXXO)
FTP        RMTSYS('10.237.11.201') 

INPUT中的MEMBER可以如下写,OUTPUT的MEMBER就是FTP的log输出

user pwd

LCD XETDBF          
BIN                 
PUT R2G.R2G R2G.DAT 
LS                  
QUIT                

3,有人喜欢用STRSQL来查看数据,多MEMBER就给带来了不便,我们也可以用OVRDBF来实现自己的要求。方法如下:

进入SQL画面后执行如下语句:

CALL QCMD

OVRDBF FILE(BB) TOFILE(YOURLIB/#FILE) MBR(MBR001) OVRSCOPE(*JOB)

F3返回后直接对BB操作就可以了。

 

参数OVRSCOPE的介绍贴地址:

参数OVRSCOPE有3个选项,*JOB,*CALLLVL,*ACTGRPDFN
*JOB就是整个job的范围,这是一个最大的范围,所有程序都受此影响
*CALLLVL和程序调用的先后顺序有关(调用链)
   这里有个call level的概念,先调用的程序的call level小,后调用的大
*ACTGRPDFN是整个group的范围
   这里有个group的概念,编译程序时有个参数DFTACTGRP可指定group,
   如果不指定,则会到一个叫*DFTACTGRP的组中,所有rpg3的程序都会编译到该组

建立:
  *JOB,*CALLLVL比较简单,不会变化
  *ACTGRPDFN最终的范围取决于运行该命令的程序
    如果该程序运行在某个group中,则范围就是该group
    如果该程序运行在*DFTACTGRP,则范围是该程序对应的call level
重建:
  如果对一个file Ovrdbf后,又对此file做一次ovrdbf会发生什么呢
  答案是后一次会替换前一次,也就是说最后一次有效,但前提是相同范围内
  *JOB的范围是整个job,只要在同一个job,后建的会将前面的替换
  *CALLLVL的范围是当前的call level
  *ACTGRPDFN的范围是当前的group
使用:(重要)
  ovrdbf起作用的时候是打开文件的时候
  如果对一个file同时存在3种不同范围的ovrdbf,究竟会用哪个呢?
  这要取决于打开这个文件的程序
  程序的group是*DFTACTGRP的,首先会找job范围的ovrdbf,如果没有,则找call level范围的
     注意,如果在不同的call level都有定义ovrdbf,则会找call level最小的那个
  程序的group不是*DFTACTGRP的,首先会找job范围的ovrdbf,如果没有,则找group范围的
     如果group中还没有,则会找call level范围的
生存期:
  ovrdbf会在对应的范围结束时自动消失
  *job会在job结束时消失,*CALLLVL会在该call level结束时消失
  *ACTGRPDFN会在该group结束时消失
删除:
  可在对应的范围内删除
  *job的可在job内删除,*CALLLVL的可在该call level里删除
  *ACTGRPDFN的可在该group内删除
    注意,在同一个组中有很多程序,他们调用的先后顺序不同,call level也不同
    比如程序a调用程序b,在a里建的范围为group的ovrdbf,可在程序b里删除
    程序b里建的范围为group的ovrdbf不会应为程序b的终止而消失(参看生存期)

 

阅读(4692) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~