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 语句应用的通过工夫。