SQL怎样模拟RPG中的SETLL定位啊?

发布于 2022-08-30 16:15:37 字数 67 浏览 5 评论 6

如果只有一个KEY FIELD那还可以,如果有多个KEY FIELD真的想不出有什么好主意。做过这类东西的有什么经验拿出来共享一下巴!

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

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

发布评论

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

评论(6

蓝色星空 2022-09-02 04:22:10

简化到什么程度啊
WHERE K1 = W#K1  AND
             K2 = W#K2
ORDER BY K1  
               ,K2

骄傲 2022-09-02 04:22:07

这个我知道啊。问题是where 的条件有没有可能简化一些。

撩起发的微风 2022-09-02 04:22:05

游标OPEN的时候就相当于定位了

自由如风 2022-09-02 04:22:03

使用游标定义在WHERE里写条件
然后用FETCH读取

花海 2022-09-02 03:52:10

这个问题有点像用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 编辑 ]

蔚蓝源自深海 2022-09-01 20:49:52

使用 cursor: order by fld1, fld2, ...
fetch
可行吗?

我发现SQLRPGLE使用比较复杂的 sum group by 要改用 LF+RPGLE来实现比较麻烦
SQLRPGLE可能占用CPU比较厉害,是因为没有可利用的LF?

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