关于程序描述文件
在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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
本帖最后由 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
这回对程序描述文件有了较为深刻的理解了。再次谢谢passthru的解答。
如果你想实现一楼的idea,可以这样做,用一个你想需要的键值位置的PF-b,长度与你的一个字段的PF-a长度一样。对PF-b生成一个LF,即你所需的keys的LF,把数据有PF-a导入到PF-b,就可以实现你想做的事了。
本帖最后由 passthru 于 2010-03-24 09:09 编辑
程序描述如果用到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)
谢谢。
这个只能用sqlrpgle来实现。
比如有个表只有一个字段,如果想按照这个字段中间的某几位为key读取多条数据的话应该怎么做。
查了下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的支持啊。我的理解是不是正确的。请指正。
下面的类似的情况我已经测试过了。