在SAP中类似MDTC INDX这种压缩表,在前台数据库无法直观的看到他的存储内容,因为他的数据是经过压缩的,先转化为十六进制的字符串,然后再写入数据库
这类压缩表格式是这样的,有点类似长文本,但是处理不太一样
要把数据存入这种数据库表,或者获取这种内表的数据是通过 IMPORT/EXPORT 数据表中的区域,比如在INDX表中IMPORT/EXPORT是根据SRTFD来的,把SRTFD作为database ID 来唯一确定某一条数据。而可以压缩的数据可以是任何数据类型的变量,或者是把一整个内表都压缩进去,他会自己在后台做一定的转换,看完代码测试就都懂了。
测试CODE:
REPORT zcycle027.
DATA: database_id LIKE indx-srtfd VALUE 'ZGXTESTINDX'. " export/import to database ID
DATA: gv_string TYPE string VALUE 'TEST FOR THIS',
out_string TYPE string .
EXPORT string = gv_string TO DATABASE indx(st) ID database_id .
IMPORT string = out_string FROM DATABASE indx(st) ID database_id .
cl_demo_output=>display( out_string ).
执行程序前,表INDX 里 ST 簇 的数据只有六条
测试结果:
执行完之后,表里变成7笔数据,刚刚我们 export 的那笔在第七笔
压缩一整个内表
TYPES: BEGIN OF TY_INDX,
FIELD1 TYPE C LENGTH 5,
FIELD2 TYPE C LENGTH 5,
FIELD3 TYPE C LENGTH 5,
FIELD4 TYPE C LENGTH 5,
END OF TY_INDX.
DATA: GT_INDX TYPE TABLE OF TY_INDX WITH HEADER LINE,
OUT_INDX TYPE TABLE OF TY_INDX WITH HEADER LINE,
DATABASE_ID LIKE INDX-SRTFD VALUE 'CYCLETEST'. " export/import to database ID
GT_INDX-FIELD1 = 'TEST1'. "构建测试内表
GT_INDX-FIELD2 = '220'.
APPEND GT_INDX .
CLEAR GT_INDX.
GT_INDX-FIELD1 = 'TEST2'.
GT_INDX-FIELD2 = '230'.
APPEND GT_INDX .
CLEAR GT_INDX.
GT_INDX-FIELD1 = 'TEST3'.
GT_INDX-FIELD3 = '240'.
APPEND GT_INDX .
CLEAR GT_INDX.
GT_INDX-FIELD1 = 'TEST4'.
GT_INDX-FIELD4 = '250'.
APPEND GT_INDX .
CLEAR GT_INDX.
EXPORT LINES = GT_INDX[] TO DATABASE INDX(ST) ID DATABASE_ID .
IMPORT LINES = OUT_INDX[] FROM DATABASE INDX(ST) ID DATABASE_ID.
cl_demo_output=>display( OUT_INDX[] ).
测试结果:
同时,表INDX 里 ST 簇变成了 8 笔