SQL怎样模拟RPG中的SETLL定位啊?
如果只有一个KEY FIELD那还可以,如果有多个KEY FIELD真的想不出有什么好主意。做过这类东西的有什么经验拿出来共享一下巴!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如果只有一个KEY FIELD那还可以,如果有多个KEY FIELD真的想不出有什么好主意。做过这类东西的有什么经验拿出来共享一下巴!
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
简化到什么程度啊
WHERE K1 = W#K1 AND
K2 = W#K2
ORDER BY K1
,K2
这个我知道啊。问题是where 的条件有没有可能简化一些。
游标OPEN的时候就相当于定位了
使用游标定义在WHERE里写条件
然后用FETCH读取
这个问题有点像用8位机的汇编语言写一个比较字符串大小的程序。
8位机每次只可以比较一个字节(相当于这里我们一次只可以比较一个键值)。setll的条件类似于文件的键值和 setll 的键值:
my_pos_key klist
kfld p1
kfld p2
kfld p3
...
kfld pn
my_pos_key setll my_file
K1K2K3K4K5...KN >= P1P2P3P4P5...PN
我们从左到右进行比较:
如果K1>p1, 肯定满足条件。
如果K1=p1, 再比较下一个键。
如果K1<p1, 立马出局,比都不用比。
.....
如果K2>p2, 肯定满足条件。
如果K2=p2, 再比较下一个键。
如果K2<p2, 立马出局,比都不用比。
...
如果Kn>=pn, 肯定满足条件。
如果Kn<pn, 立马出局,比都不用比。
用SQL CURSOR陈述就像下面一样子:
DECLARE C1 CURSOR FOR SELECT * FROM MY_FILE
WHERE
K1>:p1
OR
K1=:p1 AND K2>:p2
OR
K1=:p1 AND K2=:p2 AND K3>:p3
OR
...
OR
K1=:p1 AND K2=:p2 AND K3=:p3 AND ... AND Kn-2>:pn-2
OR
K1=:p1 AND K2=:p2 AND K3=:p3 AND ... AND Kn-2=:pn-2 AND Kn-1>:pn-1
OR
K1=:p1 AND K2=:p2 AND K3=:p3 AND ... AND Kn-2=:pn-2 AND Kn-1=:pn-1 AND Kn>=pn
ORDER BY
K1, K2, K3, ... Kn
好像太复杂。有没有更好的方法呢?先抛砖引玉一下。请网友们多提建议。
这种方法只可以前进,不能倒退(如用于subfile 的 page-up).
[ 本帖最后由 franliu 于 2009-12-8 10:04 编辑 ]
使用 cursor: order by fld1, fld2, ...
fetch
可行吗?
我发现SQLRPGLE使用比较复杂的 sum group by 要改用 LF+RPGLE来实现比较麻烦
SQLRPGLE可能占用CPU比较厉害,是因为没有可利用的LF?