导语:最近在写一个通用接口生成器,在翻阅资料得时候偶然发现了一个语法,就是将内表数据保存在database上(可能这里描述的不太准确),而不是数据库表里,这样可以在不储存到数据库表的情况下,形成一个版本的概念,在这里分享一下。
其实这个语法是一套的,一个储存,一个读取,都是在DATABASE上完成的。
储存语法
EXPRORT 储存名称 = 内表名称 TO DATABASE indx(st) ID 储存ID.
"示例
DATA :g_indxid TYPE indx_srtfd.
g_indxid = 'XFZ001'.
FREE MEMORY ID g_indxid.
EXPORT table1 = gt_yh001h1 table2 = gt_yh001h2 TO DATABASE indx(st) ID g_indxid.
这样就将GT_YH001H1、GT_YH001H2,两个内表的数据储存到ID为’XFZ001’中相应的TABLE1、TABLE2储存模块中了,据我目前掌握的资料是无法在数据库中看见这些值的,只可以在程序中调用出来。
读取语法
IMPORT 储存名称 = 内表名称 FROM DATABASE indx(st) ID 储存ID.
"示例
DATA :g_indxid TYPE indx_srtfd.
g_indxid = 'XFZ001'.
IMPORT table1 = gt_yh001h1 table2 = gt_yh001h2 FROM DATABASE indx(st) ID g_indxid.
这样就把刚刚存放的在储存ID ‘XFZ001’ 中四个模块的数据分别放到两个内表中了。
实际应用
DATA :g_indxid TYPE indx_srtfd.
g_indxid = 'ZYH001_' && p_prog.
ok_code = sy-ucomm.
CLEAR sy-ucomm.
CASE ok_code.
WHEN 'GEN'.
"储存到DATABASE中
FREE MEMORY ID g_indxid.
EXPORT table1 = gt_yh001h1 table2 = gt_yh001h2 TO DATABASE indx(st) ID g_indxid.
"以防万一储存到数据库表中一份
PERFORM frm_save_yh001.
WHEN 'UPLOAD'.
"从DATABASE中上载配置,暂时不从数据库中上载
IMPORT table1 = gt_yh001h1 table2 = gt_yh001h2 FROM DATABASE indx(st) ID g_indxid.
PERFORM alv_refresh_display.
ENDCASE.
提示:如果在ALV中使用,记得刷新ALV才会把内表数据展示出来
举个简单例子吧,感觉上面写的有点复杂
"清空缓存变量
FREE MEMORY ID 'U916'.
"储存变量
EXPORT tcode = 'F.05' TO DATABASE indx(st) ID 'U916'.
"读取变量
DATA : LV_TCODE TYPE SY-TCODE.
IMPORT tcode = LV_TCODE FROM DATABASE indx(st) ID 'U916'.
"清空缓存变量
FREE MEMORY ID 'U916'.
作者:小飞猪猪猪猪猪猪猪–CSDN
注意:转发请注明作者