`
JerryWang_SAP
  • 浏览: 1043913 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

ABAP OPEN SQL里OPEN CURSOR和SELECT的比较

阅读更多

OPEN CURSOR

After the OPEN CURSOR statement, the database cursor is positioned in front of the first line of the result set.

FETCH

This statement extracts the requested rows (using the addition INTO or APPENDING) from the results set of the database cursor from the current cursor position and assigns these rows to the data objects specified in the results set. If an internal table is specified after INTO or APPENDING, then either all rows are extracted, or as many as specified in the addition PACKAGE SIZE. The statement FETCH moves the position of the database cursor by the amount of extracted lines to the next line to be extracted.

我写了一个很简单的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那样的机制,使得其能够记住当前正在操作的记录在结果集里的位置。

要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

 
 
0
0
分享到:
评论

相关推荐

    SAP-ABAP-SQL中的select语句讲解

    ABAP中SQL语法详细介绍,包括基础语法和各种聚合函数,如MAX,MIN,AVG,COUNT,SUM,DIV,MOD,CEIL,FLOOR,DIVSION,ROUND,FOR ALL ENTRIES IN.除了各种聚合函数还有字段拆分,连接,子语句查询,字段类型转换,分情况赋值...

    SAP ABAP SQL查询分析器(ABAP动态SQL执行)ZSQLEXPLORER

    这个是国外人使用ABAP写的一个类似一SQL Server的查询分析器,它能够直接运行ABAP的OPEN SQL,由于SE11或者是SE16都只能对一表进行查询,但很多的时候我们需要对多个表进行联合查询,这时就可以发挥很大作用了,希望...

    ABAP SQL 语句 动态 操作

    本程序“ZSQL_EXEC_RICOO”展示了如何使用ABAP实现动态SQL操作,包括SELECT、UPDATE、DELETE和INSERT等操作。以下是关于这个程序和ABAP SQL动态操作的详细说明: 1. **动态SQL构建**: 在ABAP中,我们可以使用`...

    ABAP SQL 查询 程序

    Open SQL的命令通常包括SELECT、INSERT、UPDATE、DELETE等,它们与标准SQL非常相似,但有一些特定的ABAP扩展。例如,`FROM`子句中的表名可以用内部表替代,`WHERE`子句可以使用ABAP逻辑运算符,如`=`, `, `>`, `AND...

    ABAP字符串SQL Functions语法总结

    ABAP是一种专为SAP系统设计的编程语言,而在ABAP中处理字符串时,SQL Functions提供了许多方便的方法。本文将对ABAP SQL Functions for Strings进行详细的语法总结。 首先,我们来讨论一下如何在ABAP SQL中跨Client...

    abap 关于SQL语句的性能

    在ABAP环境中,SQL语句的性能优化是提高系统响应速度和资源利用效率的关键环节。本文将基于给定的代码片段,深入探讨两种不同的SQL查询方法,并分析它们在性能上的差异,以帮助开发者理解如何编写更高效、更经济的...

    基于SAPR/3系统的ABAP语言OpenSQL应用.pdf

    基于SAP R/3系统的ABAP语言OpenSQL应用主要围绕在SAP系统中如何使用ABAP(Advanced Business Application Programming)语言的OpenSQL(开放SQL)子集进行数据访问和处理展开。OpenSQL是ABAP语言中用于数据库操作的...

    zquery:ZQUERY - Open SQL Editor 是一个项目,允许您执行和构建 SAP ABAP Open SQL 查询,而无需创建测试程序。 您可以创建查询并生成自己的类型。 生成您的 Where 子句,甚至是您的 Select 子句

    ZQUERY - Open SQL Editor 是一个项目,允许您执行和构建 SAP ABAP Open SQL 查询,而无需创建测试程序。 您可以创建查询并生成自己的类型。 生成您的 Where 子句,甚至是您的 Select 子句。 要安装 ZQUERY 程序,...

    sap ABAP配置sql server

    sap ABAP 配置外界数据库SQL server驱动,官方步骤。

    ABAP SQL使用技巧

    ### ABAP SQL 使用技巧详解 在 SAP 系统开发中,ABAP 语言与 SQL 查询紧密结合,通过优化 SQL 查询方式可以显著提升程序性能。本文将详细介绍 ABAP 中 SQL 查询的各种技巧,帮助开发者更好地掌握这些技能。 #### 1...

    abap SQL优化

    在ABAP开发中,SQL查询的性能优化是非常重要的环节之一,它直接影响到系统的响应时间和用户体验。本文将从多个方面探讨如何在ABAP编程中优化SQL语句,提高程序运行效率。 #### 一、使用WHERE子句进行筛选 1. **...

    The ABAP SQL Trace (ST05)

    然而,在标准的 ABAP 课程中,关于如何使用 ABAP SQL 跟踪和解释其结果的信息却鲜为人知。这篇博客旨在为您提供 ABAP SQL 跟踪的快速介绍,展示如何执行跟踪、如何获取结果概要,以及如何解释结果。 使用 ABAP SQL ...

    SAP ABAP开发学习——第14课:动态SQL(视频教程)

    动态SQL是ABAP编程中用于执行数据库操作的一种技术,它允许在运行时构建和执行SQL查询,而不是在编译时硬编码。 1. **动态SQL的基本概念**: - 动态SQL与静态SQL的区别在于,静态SQL在编译时即被解析,而动态SQL则...

    Update和Select结合使用

    为了提高效率和减少资源消耗,将`UPDATE`语句与`SELECT`语句相结合是一种非常实用的方法。这种方式可以实现更高效的数据处理,特别是在需要批量更新记录时。下面我们将深入探讨如何将`UPDATE`与`SELECT`结合使用,并...

    ABAP开发利器-ZSQLEXPLORER

    为了充分利用ZSQLEXPLORER,开发者应熟悉SQL语言的基本语法,包括SELECT、FROM、WHERE、JOIN等关键字,以及子查询和聚合函数的应用。同时,了解SAP的数据库结构和ABAP数据类型也是必不可少的。通过熟练运用...

    SAP SQL 查询器开发源代码

    ABAP提供了DBOPEN、DBEXEC和DBCLOSE等函数来执行SQL语句,或者你可以使用更现代的Open SQL和ABAP SQL语法,它们更接近标准SQL,能简化数据访问。 在SAP系统中,SQL查询通常通过Open SQL进行,这是一种特定于SAP的...

    Intro to ABAP-----一套挺有意思的abap教材

    11. ABAP Open SQL Extensions 12. Authorizations, Passing Between Programs, Catching Runtime Errors 13. Events 14. Selectin Screens and User Messages 15. Using the SQL Trace Tool

    ABAP select 语句

    总的来说,ABAP的SELECT语句提供了强大的功能来处理多表查询,通过灵活运用各种联接类型和聚合函数,可以高效地从数据库中提取所需的数据。在实际开发中,理解并熟练掌握这些概念对于编写高效、健壮的ABAP代码至关...

    Webdynpro for ABAP中select option 用法

    这些主题可以进一步深化您对Webdynpro for ABAP中Select Options的理解和应用能力。 #### 结论 在Webdynpro for ABAP中使用Select Options可以帮助开发者构建更灵活且易于维护的应用程序。通过利用SAP的标准组件和...

Global site tag (gtag.js) - Google Analytics