SAP ABAP FOR ALL ENTRIES 的用法

FOR ALL ENTRIES 子句是 ABAP OPEN SQL 语句中常用的功能。带有 FOR ALL ENTRIES 子句的 OPEN SQL 语句代表一种同时包含数据库表和 ABAP 内表的 OPEN SQL 语句类型。过去我们可以使用 JOIN 转换来执行这种 SQL 语句。借助快速数据访问 (Fast Data Access,简称 FDA),可以使用一种使用 FOR ALL ENTRIES 子句执行 SQL 语句的新方法。

本文将解释 SAP ABAP 内核中的数据访问 (FDA) 的工作速度有多快,以及为什么对于带有 FOR ALL ENTRIES 子句的 OPEN SQL SELECT 语句,FDA 比 JOIN 转换更合适。

默认情况下,适用于 Linux、UNIX 和 Windows 的 IBM Db2 的数据库共享库 (DBSL) 对这些语句使用 FDA——前提是在 Unicode 系统上具有 SAP 内核 7.49 或更高版本以及数据库版本 10.5 FP7 或更高版本。

ABAP For All entries 的用法

带有 FOR ALL ENTRIES 子句的 OPEN SQL 语句代表一种同时包含数据库表和 ABAP 内部表的 OPEN SQL 语句类型。

这些语句的基本形式如下:

SELECT <column list>
FROM < database tables>
FOR ALL ENTRIES IN @itab
WHERE < clause containing database table columns and itab columns>

基本上,这种语句类型实现了数据库表和 ABAP 内部表 itab 之间的 JOIN。 只有结果集中不同的行被返回给 ABAP 程序。 由于 ABAP 内部表位于 SAP 应用程序服务器上,因此需要将来自该表的引用列值传输到数据库服务器。

一个具体的例子:

DATA: db6    LIKE standard table of t100.
DATA: db6out LIKE standard table of t100.

DATA: start_time TYPE i,
end_time   TYPE i,
run_time   TYPE float.

SELECT * FROM t100 UP TO 100000 ROWS INTO TABLE db6 .

GET RUN TIME FIELD start_time.

SELECT * INTO TABLE db6out FROM t100
BYPASSING BUFFER
FOR ALL ENTRIES IN db6
WHERE sprsl = db6-sprsl
AND arbgb = db6-arbgb
AND msgnr = db6-msgnr.

GET RUN TIME FIELD end_time.
run_time = end_time – start_time .

WRITE : / run_time .

测试程序从数据库表 T100 中选择 100,000 行到一个名为 db6 的内部表中。 此后,程序使用 FOR ALL ENTRIES 语句将数据库表 T100 与内部表 db6 连接起来。 由于连接使用表 T100 的主键列,因此 FOR ALL ENTRIES 语句将返回 100,000 行。 程序显示 FOR ALL ENTRIES 语句使用的经过时间。

猜你喜欢

转载自blog.csdn.net/i042416/article/details/124131342