RPGLE操作Keyed Logical File

在AS400里面,数据存放在物理文件中,逻辑文件可以实现对数据的筛选,功能类似视图。

如果我们使用create view命令,在AS400里面建立视图,其本质上还是在创建逻辑文件,只不过这个过程有I5/OS完成。

当我们使用create index命令建立索引的时候,还是在创建逻辑文件,只不过这个逻辑文件有K值,这就是Keyed Logical File。

下面是一个对Keyed Logical File进行操作的RPGLE程序:

     F*Function:操作带K的逻辑文件
     FSTUFML    UF   E           K DISK
     C*程序控制
     C                   EXSR      @MAIN
     C                   EXSR      @EXIT
     C*主处理
     C     @MAIN         BEGSR
     C*让游标指向过滤后的数据的前面
     C*这里根据性别去查找,游标指向找到的一堆记录的前面
     C*
     C*对于读取的数据,若记录当中没有K值,我们可以如下来顺序读取记录:
     C*    1             SETLL     R_PF
     C*也可以不用设置游标,直接按记录的原始存储顺序读取
     C*                  READ      R_PF
     C     *LOVAL        SETLL     RSTU
     C*使游标指向第一条数据
     C                   READ      RSTU
     C                   DOW       NOT %EOF(STUFML)
     C*修改1990-01-01后出生的同学地址
     C                   IF        DOB > D'1990-01-01'
     C                   EVAL      ADDR = 'GUANGZHOU'
     C                   UPDATE    RSTU
     C                   ENDIF
     C*让游标指向下一条数据
     C                   READ      RSTU
     C                   ENDDO
     C                   ENDSR
     C*退出程序
     C     @EXIT         BEGSR
     C                   EVAL      *INLR='1'
     C                   RETURN
     C                   ENDSR
程序主要是对性别为0(女)的学生进行更新操作,物理文件和逻辑文件如下:

DDS---STUDENT
---------------------------------------------------------------------
A                                           UNIQUE               
A               R RSTU                      TEXT(' 学生信息 ')   
A                 SNO            8S         COLHDG(' 学号 ')     
A                 SNAME         10A         COLHDG(' 姓名 ')     
A                 SEX            1A         COLHDG(' 性别 ')     
A                                           VALUES('0' '1')      
A                                           TEXT('0- 女 ,1- 男 ')
A                 DOB             L         COLHDG(' 生日 ')     
A                                           DATFMT(*ISO)         
A                 ADDR          15A         COLHDG(' 地址 ')     
A               K SNO                                            
--------------------------------------------------------------------
DDS---STUFML
--------------------------------------------------------------------
     A          R RSTU                      PFILE(STUDENT)
     A          K SEX                                     
     A          S SEX                       CMP(EQ '0')   
--------------------------------------------------------------------
下面是原始数据:

SELECT * FROM STUDENT
    学号     姓名        性别    生日      地址     
 10122111   SCOTT         1     12-01-85  GUANGZHOU 
 10123210   THOMAS        1     07-12-90  NEW YORK  
 10122230   ALICE         0     03-11-91  NEW YORK  
 10212101   ANGELIA       0     10-17-89  SHANGHAI  
 10122402   CHARLENE      0     11-12-89  BEIJING   
 10121122   ADAMS         1     01-01-92  HONGKONG  
 10122309   TONY          1     01-12-81  TAIWAN    
 10120013   CATHY         0     10-28-93  MACAO 
下面是逻辑文件筛选出来的数据:

SELECT * FROM STUFML
    学号     姓名        性别    生日      地址    
 10122230   ALICE         0     03-11-91  NEW YORK 
 10212101   ANGELIA       0     10-17-89  SHANGHAI 
 10122402   CHARLENE      0     11-12-89  BEIJING  
 10120013   CATHY         0     10-28-93  MACAO 
在编译程序成功之后,CALL程序,再查询,结果如下:

   学号     姓名        性别    生日      地址     
10122230   ALICE         0     03-11-91  GUANGZHOU 
10212101   ANGELIA       0     10-17-89  SHANGHAI  
10122402   CHARLENE      0     11-12-89  BEIJING   
10120013   CATHY         0     10-28-93  GUANGZHOU
这里需要注意的地方是,此逻辑文件只是基于一个物理文件,当基于多个物理文件的时候(JFILE),情况就不是这样了。

逻辑文件STUFML只是对物理文件STUDENT的数据进行筛选,并拥有自己的键K,当我们修改逻辑文件所呈现的数据的时候,可以直接使用物理文件的字段,

因为本质上我们还是对逻辑文件基于的物理文件的数据进行修改。

逻辑文件STUFML的建立,可以转换为如下的 SQL语句:

CREATE INDEX IDXSEX ON STUDENT(SEX) WHERE SEX = '0' 

当我们向数据库发出这样的语句:select  *  from  student  where  sex = '0'时,索引就使用到了。

Keyed Logical File类似数据库中的Index,他们都能快速定位数据集,并找到指定数据。

下面是DB2 V9.7创建索引命令:

DB2 V9.7 Create index statement

下面是iSeries V5R4创建LF的命令:

iSeries v5r4 Create Logical File

你可能感兴趣的:(c,数据库,function,File,db2,disk)