1.ABAP内存数据簇
不同的abap程序有其局部数据对象存储空间,一个程序不能使用其他程序中的变量,但如果一个程序调用另一个程序(改程序可继续调用其他程序),则可以使用abap内存数据簇在程序调用链内进行数据传递。语法如下:.....{to|from}memory......
存储的数据簇可以保存直到一个程序调用序列的结束,也可以使用下列语句将当前堆栈内表的数据簇清空:
free memory ID id.
示例:
repor z_test1
data text(20) value ‘Date Clustr’.
export dc = text to memory id 'MEM'. 此语句还可以这样写 exprot text to memory ID ‘mem’.
submit z_test2.
在report z_test2程序中读取
report z_test2.
data text(20).
import dc = text from memory ID 'MEN'. 此句还可以这样写import text from memory ID‘mem’.
write: / text.
2.数据库中的数据簇
如果需要将数据对象更长期的进行存储,还可以将其以簇的形式存在数据库中,用于存放数据簇的数据库表需要有特定的结构设计,是一种比较特殊的表,其中存储的数据簇也需要import和export语句进行操作,而不是使用open sql语句,sap中提供了数据库表indx,该表是可以用于存放数据簇的数据库表模板,而程序员可以将簇数据放置于其中进行存储.
该表从MANDT到SRTF2之间的所有字段是表关键字段,包含具体数据簇的定义部分,其后的各字段至CLUSTR是应用相关字段,用于存放用户管理数据,可以通过在EXPORT语句中指定相同结构的工作区对其中数据进行修改
在操作簇数据库过程中,除需要指定数据簇ID之外,还需要特定的双字节数据簇区域ID(因为一个数据库表可以包含多个数据簇区域),格式如下:
...{to|from}database dbtab(ar) ...
操作数据库中数据簇的内存示例代码如下:
report demo_data_ext_cluster_export_d.
DATA wa_indx type indx.
data:BEGIN OF wa_itab,
col1 TYPE i,
col2 TYPE i,
END OF wa_itab.
DATA itab LIKE TABLE OF wa_itab.
DO 3000 TIMES.
wa_itab-col1 = sy-index.
wa_itab-col2 = sy-index ** 2.
APPEND wa_itab to itab.
ENDDO.
wa_indx-aedat = sy-datum.
wa_indx-usera = sy-uname.
wa_indx-pgmid = sy-repid.
EXPORT itab to DATABASE indx(hk) ID 'Table' FROM wa_indx.
* DELETE FROM DATABASE dbtab(ar) ID id. "如果要删除簇语句
3.跨事务缓存数据簇
跨事务应用缓存是同一个应用服务器中所有程序和会话均可以共享的存储区域,该存储区中数据簇的结构与数据库中类似,指定其存储区域的语法形式如下:
...{to|from} shared duffer dbtab(ar)....
必须指定一个数据库表结构(例如indx),语句将该结构拷贝至缓存区,并进行数据簇存储,该簇将保存到所有当前应用服务器中的程序结束