免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3870 | 回复: 10
打印 上一主题 下一主题

关于程序描述文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-23 17:01 |只看该作者 |倒序浏览
在rpg中可以这样声明文件,就是通常说的程序描述文件
其中splf文件是一个单字段的物理表。
我用CRTPF FILE(PTRLIB/SPLF) RCDLEN(132)   

     FSPLF    IF  F     132  3AI     5 DISK                     
     ISPLF    AA  01                                            
     I                                        5   7 W#KEY      
     I                                        8  21 W#DTA      

这个带KEY的程序描述文件,能不能这样用,
如果不能,那该如何使用这个文件。
如果可以该怎么用。比如用某个key值去reade,去chain。
望高人指点。

论坛徽章:
0
2 [报告]
发表于 2010-03-23 17:09 |只看该作者
下面的类似的情况我已经测试过了。

dd.JPG (36.79 KB, 下载次数: 42)

dd.JPG

论坛徽章:
0
3 [报告]
发表于 2010-03-23 17:19 |只看该作者
查了下guide其中有句话是这样的:
An indexed file is a program-described DISK file whose access path is built on key
values. You must create the access path for an indexed file by using data
description specifications.

是不是我的那个声明必须有DDS的支持啊。我的理解是不是正确的。请指正。

论坛徽章:
0
4 [报告]
发表于 2010-03-23 17:28 |只看该作者
比如有个表只有一个字段,如果想按照这个字段中间的某几位为key读取多条数据的话应该怎么做。

论坛徽章:
0
5 [报告]
发表于 2010-03-24 08:54 |只看该作者
比如有个表只有一个字段,如果想按照这个字段中间的某几位为key读取多条数据的话应该怎么做。
pantierui 发表于 2010-03-23 17:28



    这个只能用sqlrpgle来实现。

论坛徽章:
0
6 [报告]
发表于 2010-03-24 09:06 |只看该作者
这个只能用sqlrpgle来实现。
passthru 发表于 2010-03-24 08:54


谢谢。

论坛徽章:
0
7 [报告]
发表于 2010-03-24 09:06 |只看该作者
本帖最后由 passthru 于 2010-03-24 09:09 编辑
在rpg中可以这样声明文件,就是通常说的程序描述文件
其中splf文件是一个单字段的物理表。
我用CRTPF FIL ...
pantierui 发表于 2010-03-23 17:01



    程序描述如果用到key描述,就是充分利用外部由dds产生的LF文件如:

               R REC
                          FLDN
                          KFLD1
                          FLDN+1
                          KFLD2
                          KFLD3
                          ....
                      K  KFLD1
                      K  KFLD2
                      K  KFLD3
   这时如果用的KFLD1,假设这个KFLD1在LFF记录位置为26,长度为10,描述如下:
  FSPLF    IF  F     132  3AI     10 DISK    KEYLOC(26)

   如果用到KFLD2与KFLD3的组合键值,假设KFLD2+KFLD3的长度为12,记录位置30,描述如下:
  FSPLF    IF  F     132  3AI     12 DISK    KEYLOC(30)

论坛徽章:
0
8 [报告]
发表于 2010-03-24 09:22 |只看该作者
如果你想实现一楼的idea,可以这样做,用一个你想需要的键值位置的PF-b,长度与你的一个字段的PF-a长度一样。对PF-b生成一个LF,即你所需的keys的LF,把数据有PF-a导入到PF-b,就可以实现你想做的事了。

论坛徽章:
0
9 [报告]
发表于 2010-03-24 09:32 |只看该作者
这回对程序描述文件有了较为深刻的理解了。再次谢谢passthru的解答。

论坛徽章:
0
10 [报告]
发表于 2010-03-24 15:15 |只看该作者
本帖最后由 pantierui 于 2010-03-24 15:21 编辑

下面是SQLRPG程序,欢迎讨论。
     ID@DTA       DS                                                               
     I                                        1 132 D#DATA                        
     I                                      133 135 D#KEY                          
     IW@DTA       DS                                                               
     I                                        1   4 W#BLK                          
     I                                        5   7 W#KEY                          
     I                                        8  20 W#DTA                          
     I                                       21 132 W#SPC                          
     **                                                                           
     C                     MOVEL'111'     ##KEY   3                                
     **                                                                           
     C/EXEC SQL                                                                    
     C+ DECLARE C1 CURSOR FOR                                                      
     C+ SELECT SPLF,SUBSTR(SPLF,5,3) AS KEY                                       
     C+ FROM PTRLIB/SPLF                                                           
     C+ WHERE SUBSTR(SPLF,5,3) = :##KEY                                            
     C+ ORDER BY KEY                                                               
     C/END-EXEC                                                                    
     **         
     C/EXEC SQL                                                
     C+ OPEN C1                                                
     C/END-EXEC                                                
     **                                                         
     C           LABF      TAG      
     C                     MOVEL*BLANK    D@DTA                              
     C/EXEC SQL                                                
     C+ FETCH C1 INTO : D@DTA                                    
     C/END-EXEC                                                
     **                                                         
     C           SQLCOD    IFEQ *ZERO                           
     C                     MOVELD#DATA    W@DTA                 
     C           W#KEY     DSPLY                                
     C           W#DTA     DSPLY                                
     C                     GOTO LABF                           
     C                     ENDIF                                
     **                                                         
     C/EXEC SQL                                                   
     C+ CLOSE C1                                                   
     C/END-EXEC                                          
     **                                                  
     C                     SETON                     LR  
     C                     RETRN
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP