关于程序描述文件

发布于 2022-08-25 02:35:18 字数 1220 浏览 15 评论 9

在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。
望高人指点。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

浅唱々樱花落 2022-09-05 00:31:47

本帖最后由 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

苍风燃霜 2022-09-05 00:30:19

这回对程序描述文件有了较为深刻的理解了。再次谢谢passthru的解答。

み格子的夏天 2022-09-05 00:27:37

如果你想实现一楼的idea,可以这样做,用一个你想需要的键值位置的PF-b,长度与你的一个字段的PF-a长度一样。对PF-b生成一个LF,即你所需的keys的LF,把数据有PF-a导入到PF-b,就可以实现你想做的事了。

嘿看小鸭子会跑 2022-09-05 00:27:11

本帖最后由 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)

终难愈 2022-09-04 23:29:30

这个只能用sqlrpgle来实现。
passthru 发表于 2010-03-24 08:54

谢谢。

冰魂雪魄 2022-09-04 22:19:35

比如有个表只有一个字段,如果想按照这个字段中间的某几位为key读取多条数据的话应该怎么做。
pantierui 发表于 2010-03-23 17:28

    这个只能用sqlrpgle来实现。

智商已欠费 2022-09-04 22:15:55

比如有个表只有一个字段,如果想按照这个字段中间的某几位为key读取多条数据的话应该怎么做。

浅唱々樱花落 2022-09-04 21:41:50

查了下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的支持啊。我的理解是不是正确的。请指正。

夏见 2022-08-26 04:02:30

下面的类似的情况我已经测试过了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文