如何进行ABAP OPEN SQL中OPEN CURSOR和SELECT的比较

42次阅读
没有评论

共计 1570 个字符,预计需要花费 4 分钟才能阅读完成。

行业资讯    
数据库    
如何进行 ABAP OPEN SQL 中 OPEN CURSOR 和 SELECT 的比较

本篇文章为大家展示了如何进行 ABAP OPEN SQL 中 OPEN CURSOR 和 SELECT 的比较,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

我写了一个很简单的 report 验证:

Source code:

 OPEN CURSOR lv_cursor FOR SELECT product_guid FROM comm_product.
FETCH NEXT CURSOR lv_cursor INTO TABLE lt_selection PACKAGE SIZE size.

Size = 1: 此时从 ST05 里观察到表 COMM_PRODUCT 里总共被扫描的记录数量是 1447.

第二次以 size = 100 执行,PREPARE 和 OPEN 直接变成 REOPEN,但是 recs 仍然是 1447.

对 ST05 里的字段 Recs 按 F1,查看说明:

这个 1447 是怎么来的呢?因为我 OPEN CURSOR 时候没有指定任何条件,所以在 OPEN CURSOR 时,DB 把整个 product 表的所有记录视为一个结果集,然后只返回指定 package size 的条数。

所以 ST05 里面看到的这个 Recs 是指满足 OPEN CURSOR 指定条件的记录的个数,并不是最后返回给 ABAP 层的记录的个数。

而在我的测试系统里,表 COMM_PRODUCT 总共就包含 1447 条记录。

然后我再生成 3 个新的 product,COMM_PRODUCT 里面就有 1450 条 entry。

重复执行测试 report。ST05 发现被扫描的记录数变成了 1450,证明我们的结论是正确的。

再做一个验证:表 COMM_PRODUCT 里面有 prefix 为 JERRY06152012 开头的 3 条记录:

修改上述的测试 report,添加一个 WHERE 查询条件:

 OPEN CURSOR lv_cursor FOR SELECT product_guid FROM comm_product
WHERE product_id LIKE  JERRY06152012% .

第一次执行 size = 1

Recs 变成 3 了,因为匹配 OPEN CURSOR 条件的确实只有 3 条记录

Size = 100, ST05 结果和 size = 1 完全一致,都是 3.

结论

WebClient UI 上的 Maximum Number of Results(简称 Max hit) 不能控制每次 OPEN CURSOR 去 DB 查找记录的条数,这个条数是由 OPEN CURSOR 后面跟的 WHERE CONDITION 决定的。Max hit 只能控制 OPEN CURSOR 的 WHERE CONDITION 所决定出的结果集里,到底有多少条返回给 ABAP。

Through the verification above, this understanding is wrong.

OPEN SQL 的 select 还有一个功能是 UP TO XX ROWS.

用下面的代码测试:

 SELECT product_guid INTO CORRESPONDING FIELDS OF TABLE lt_line FROM comm_product UP TO num ROWS.

Num = 1

Num = 143

说明 SELECT UP TO XX ROWS 是可以控制数据库表里到底有多少条记录被处理的。

但 SELECT UP TO XX ROWS 不能像 OPEN CURSOR 那样能够在 WHILE 循环里面反复执行,它不具备像 OPEN CURSOR 那样的机制,使得其能够记住当前正在操作的记录在结果集里的位置。

上述内容就是如何进行 ABAP OPEN SQL 中 OPEN CURSOR 和 SELECT 的比较,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-19发表,共计1570字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)