ABAP 提供了IMPORT/EXPORT 和 SET / GET PARAMETER 语句,可对用户内存/服务器内存/数据库进行存储和访问。不过可能很多人对此还不是很了解,下面我们通过实例来测试它们的区别和联系。
1. ABAP Memory
用户登陆后,最多一个系统可以开6个窗口,这在SAP中称为External Mode。
而同一个窗口中,运行某程序后,可以通过CALL TRANSACTION/SUBMIT或其他代码跳转到其他程序,这个称为Internal Mode。Internal Mode的调用栈最多为9层。
那么ABAP Memory,它是属于Internal Mode间可以共享的数据,而External Mode间无法共享。
例子. 创建程序A,输入:
DATA matnr TYPE matnr.
IMPORT matnr FROM MEMORY ID 'YTEST_MATNR'.
WRITE matnr.
创建程序B,输入:
DATA matnr TYPE matnr.
matnr = '000000000000001234'.
EXPORT matnr TO MEMORY ID 'YTEST_MATNR'.
SUBMIT y_program_a. "调用程序A
直接运行B,发现程序A从ABAP Memory读到了值并输出到LIST.
说明:
(1)调试运行B到EXPORT语句后面,Goto-System Area-ABAP Memory,可以查看到名为YTEST_MATNR的一片内存。
(2)如果B和A运行在不同的窗口,则A将访问不到数据;当用户输入/N退出当前程序时,内存值也将被清空。
(3)该语句适用于CALL TRANSACTION/SUBMIT过程中的数据共享,也常用于User Exit,类似于定义全局变量的效果。
2. SAP Memory
上面说了External Mode,那么它们之间共享数据必须通过SET /GET PARAMETER 语句,不再是EXPORT/IMPORT的模式。
例子. 创建程序A,输入:
DATA matnr TYPE matnr.
GET PARAMETER  ID 'YTEST' FIELD matnr.
WRITE matnr.

创建程序B,输入:
DATA: matnr TYPE matnr.
matnr = '000000000000012345'.
SET PARAMETER ID 'YTEST' FIELD matnr.
在窗口1运行程序B并关闭后,在窗口2运行程序A,发现程序A仍然读到了SAP Memory的值。
说明:
(1)调试时,可通过Goto-System Area-SAP Memory,查看到YTEST及其对应的值。
(2)SET /GET PARAMETER 的值与本次登陆有关,当用户注销后才失效。在用户登陆的时候,系统会根据每个用户User Profile-Own Data-Parameter 下的 设置 ,载入到SAP Memory。
(3)Data Element中可以看到Further Characteristics下可定义PARAMETER ID,代表该字段作为屏幕元素时,可读取该PARAMETER ID作为默认值。比如VA03会自动显示刚刚创建的订单号。
3. SHARED MEMORY/SHARED BUFFER
前 面介绍的都是用户内存,那么不同用户间如何实现数据共享呢?可以用SHARED MEMORY或SHARED BUFFER,它们是服务器上的某片所有用户共享的内存。关于SHARED MEMORY和SHARED BUFFER的区别,可以F1查看帮助。如果EXPORT SHARED BUFFER,则必须IMPORT SHARED BUFFER才能读到,用IMPORT SHARED MEMORY是读不到的。反过来也是。
例子. 创建程序A,输入:

DATA matnr TYPE matnr.
IMPORT matnr FROM SHARED BUFFER indx(aa) ID 'YTEST_MATNR'.
WRITE matnr.

创建程序B,输入:
DATA: matnr TYPE matnr.
matnr = '000000000000123456'.
EXPORT matnr TO SHARED BUFFER indx(aa) ID 'YTEST_MATNR'.
先在用户1的电脑上运行程序B,然后在用户2的电脑上运行程序A,发现用户2可以读取到值。
说明:
(1)既然是服务器上的所有用户共享空间,那么该值将保存到服务器关机重启为止,除非用户用DELETE语句清除它。其实这个跟ENQUEUE/DEQUEUE有点相似之处。
(2)数据库也可共享数据,不过服务器共享肯定速度快些,理论上适合网络游戏,呵呵。
(3)INDX是系统中存在的符合特定格式要求的表。但这不代表该EXPORT/IMPORT语句将在表INDX中增加记录,仅仅代表服务器借用了INDX的结构来管理该片共享内存。
4. DATABASE
上面说了SHARED BUFFER并不访问数据库,而要访问数据库就应该用DATABASE。
创建一个程序,录入代码:
DATA: matnr TYPE matnr.
matnr = '000000000000004321'.
EXPORT matnr TO DATABASE indx(aa) ID 'YTEST_MATNR'.
执 行程序,然后SE16查看表INDX,发现新增了一条RELID = AA, SRTFD = YTEST_MATNR的记录。如果EXPORT的数据量比较大,则新增的将是多条,这些条目的字段值SRTF2从0递增。所以EXPORT DATABASE与普通数据库操作的不同之处是,它适合大数据量的操作,系统自动将其拆分成多条记录并存储到数据库中,比如图片或文档。而用IMPORT DATABASE的过程则相反,系统将把这些条相关记录又自动组合起来成为一个整体。

ABAP Memory/SAP Memory/Shared Buffer/Database相关推荐

  1. SAP Memory ABAP Memory超级详细解析

    以前做enhancement的时候用过parameter id 和 memory id, 但很多其他语法用法我是没接触过的, 今天看了Palm同鞋做的文档SAP Memory & ABAP M ...

  2. 13_clickhouse,Merge引擎,File引擎,External Data引擎,External Data引擎,Null Engine,URL引擎,Memory、Set、Buffer

    13.Merge引擎 13.1.Merge引擎 13.2.案例 14.File引擎 14.1.File引擎 14.2.案例 15.External Data引擎 15.1.External Data引 ...

  3. Spark 内存管理 spark.executor.memory /spark.memory.fraction/spark.memory.offHeap.size【堆外内存/内存管理】 钨丝计划

    spark1.6及之后: 堆内内存: spark.executor.memory 包含 spark.memory.fraction: spark.memory.fraction 包含 spark.me ...

  4. Java (JVM) Memory Model – Memory Management in Java

    原文地址:http://www.journaldev.com/2856/java-jvm-memory-model-memory-management-in-java Understanding JV ...

  5. C28xx:File Loader:Data verificaton failed at address 0xxx Please verify target memory and memory map

    在初次使用CCS6.0时,有时会遇到这样的错误:C28xx:File Loader:Data verificaton failed at address 0xxx Please verify targ ...

  6. 【Flink】Direct buffer memory taskmanager.memory.task.off-heap.size

    文章目录 1.场景1 1.1 概述 2.场景2 1.场景1 1.1 概述 Direct buffer memory. The direct out-of-memory error has occurr ...

  7. shared memory global memory constant memory in cuda

    http://cuda-programming.blogspot.co.uk/2013/01/shared-memory-and-synchronization-in.html http://cuda ...

  8. oracle怎么启memory,修改memory内存参数,导致数据库启不来

    这几天新装完一个rac 11g的数据库,安装完成后修改memory内存参数. 重新启动时,遇到如下错误: 来自Oracle的官方解析是: Starting with Oracle Database 1 ...

  9. oracle修改memory,修改memory——target的值

    修改memory--target的值 改为900 SQL> show parameter memory NAME                                 TYPE     ...

最新文章

  1. 如何在Matlab中获取函数参数的数目?
  2. java不可变量有哪些_5.Java变量
  3. java中审核订单流程图_Java 后端横扫阿里、滴滴、美团总结的面试经验!
  4. 500万用户 表_500万用户的社交电商平台社群分层运营模型「第219期触电夜话」...
  5. 云计算学习路线图课件:云计算和虚拟机有什么区别?
  6. Day11 - 使用正则表达式
  7. [知识竞赛策划方案] 【图】关于知识竞赛抢答器的问题
  8. python基本使用时常见错误
  9. Win10网络图标消失,网络图标变成灰色,打开网络设置闪退等问题解决
  10. 当下最实用计算机编程语言,目前最流行的计算机编程语言是什么?
  11. PHP虚拟素材资源站源码带支付,素材火源码二开版带码支付源码可以做虚拟资源或源码下载网...
  12. 商汤科技VS旷视科技VS依图科技(转)
  13. android APP UI设计图标注、换算
  14. ORACLE的递归查询
  15. 物联网发展历史了解吗?带你看物联网节点
  16. Git学习笔记(复习专用,B站狂神说)
  17. android cs,《CS反恐精英》Android版 经典游戏再现
  18. 百度隐藏“快照”功能:原因未知
  19. 51、stm32单片机初学者经验之谈
  20. 制作自己的多媒体个性相册(上篇)

热门文章

  1. Curl操作es实践
  2. PHP 错误与异常 笔记与总结(14 )记录和发送异常信息
  3. 集合objectjava_collection
  4. 如何取得Win7文件的管理员权限?
  5. 一个设计反模式——究竟什么是轮子理论
  6. Rxjava、Retrofit返回json数据解析异常处理
  7. hihocoder 1638:多级并查集
  8. bootstrap30-辅助类展示不同的背景颜色
  9. 第二篇、通过蓝牙连接外设
  10. 硬盘安装WIN7方法