关于文件的 ShareODP 和 USROPN

来源:岁月联盟 编辑:zhu 时间:2008-02-21
关于文件的 ShareODP 和 USROPN内容简介:【AS400教程】1.ShareODP: 在PF或者LF编译的时候,有个SHARE(Share Open Data Path)的参数,控制该文件是否共享其打开路径。 假如指定SHARE为*NO的话,程序在每次打开一个文件的时候,都会为该文件建立一次

  【AS400教程】1.ShareODP:
  在PF或者LF编译的时候,有个SHARE(Share Open Data Path)的参数,控制该文件是否共享其打开路径。
  假如指定SHARE为*NO的话,程序在每次打开一个文件的时候,都会为该文件建立一次访问路径;假如指定SHARE为*YES的话,程序在第一次打开该文件的时候,系统建立该文件的访问路径,在同一个ActiveGroup中再打开该文件时,就不再重新建立该文件的访问路径,而是共享使用之前建立的路径,从而提高了程序运行的速度。
  一般在编译的时候该参数设置为*NO,即不是共享打开。在需要共享打开的时候,使用OVRDBF对该参数进行更改。

  使用ShareODP需要注重的一些东西:
  1).由于在不同的ActiveGroup之间不能ShareODP,所以假如几个程序在编译的时候没有加入到同一个ActivationGroup中,ShareODP就不会有什么效果。
  2).假如PGMA打开FILEA并定位到了第一条记录,然后PGMA调用PGMB;PGMB也打开了FILEA并直接读FILEA,将读到第二条记录;PGMB运行完后PGMA又继续读FILEA下一条记录,此时它读到的将是第三条记录。而假如没有ShareODP的话,PGMA两次读到的会是第一条和第二条记录,PGMB读到的会是第一条记录。

  ActiveGroup:
  在CRTPGM 的时候,有个参数ACTGRP(ActivationGroup),控制该PGM在运行的时候属于哪个ActiveGroup。假如指定*NEW,则该PGM会重新建立一个ActiveGroup;假如指定为*CALLER,则该PGM会与调用它的PGM使用同一个ActiveGroup。

  2.UserOpen:
  RPG程序在使用F表引用外部文件的时候,有一个KeyWords是USROPN。
  在没有使用USROPN的时候:系统会在每次运行该程序的时候自动打开所引用的文件;一般可以通过设置*LR为*ON来自动关闭文件,但是假如是SubProcedure,系统不会自动关闭所打开的文件。
  假如指定了USROPN:则系统不再控制文件的打开与关闭,由用户手工进行文件的OPEN与CLOSE;假如一个模块已经打开还没有关闭文件的情况下,该模块将不能再对该文件做打开的操作。
  USROPN比系统自动打开文件要慢一些。在打开同一个文件5000次的情况下,USROPN使用了400毫秒,系统自动打开只用了4毫秒。

  使用UserOpen需要注重的一些东西:
  1).在OPEN之前最好使用 %OPEN(FileName) 检查要打开的文件是否已经打开,假如没有打开再执行OPEN的操作。
  2).CLOSE *ALL的命令可以关闭本模块打开的所有文件。假如一个文件没有指定为USROPN,Close *ALL也将关闭该文件。并且假如该模块是不参与RPG Cycle的程序,如一个SubProcedure,则在第二次运行本模块的时候,该文件将不会再自动打开,此时假如再对该文件做操作,就会出错。所以最好指定文件名来CLOSE,并注重只关闭USROPN的文件。

图片内容