您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 中文培训教材第一部分第十二章 以簇方式存 储数据对象
SAPAG第十二章:以簇方式存储数据对象11第十二章以簇方式存储数据对象概览内容ABAP/4内存中的数据簇.................................................................................................1在ABAP/4内存中存储数据对象................................................................................2从内存中读取数据对象................................................................................................2删除内存中的数据簇....................................................................................................4数据库中的数据簇............................................................................................................5簇数据库........................................................................................................................5在簇数据库中存储数据对象.......................................................................................7创建数据簇目录表.......................................................................................................9从簇数据库中读取数据对象...................................................................................10从簇数据库中删除数据簇.......................................................................................12用开放式SQL语句访问簇数据库..........................................................................13可以用数据簇方式对ABAP/4程序的任何复杂内部数据对象进行分组保存,并将其临时存储在ABAP/4内存中,或长时间存储在数据库中。在下列主题中,您将学到更多有关在内存和数据库中存储数据簇的知识ABAP/4内存中的数据簇可以在ABAP/4内存中存储数据簇。ABAP/4内存是分配给特定事务的存储区,任何模块都是用关键词CALL或SUBMIT从中进行调用的。关于事务流的详细信息,参见编写ABAP/4事务(页Error!Notavalidlink.)。ABAP/4内存与在事务期间生成该内存的ABAP/4程序或程序模块无关。这意味着在同一事务中,存储在ABAP/4内存中的对象可由任何ABAP/4程序重新读取。但本节所说的ABAP/4内存与不受事务限制的全局SAP内存不同(对于示例,参见将SPA/GPA参数传送到事务(页Error!Notavalidlink.))。ABAP/4内存允许跨越多个程序层次,在不同模块化单元之间进行数据传递。例如,可以在下列单元之间传递数据:_报表和其他SUBMIT调用的报表_事务和报表_不同对话模块_程序和功能模块等等。离开事务后,就释放该内存。SAPAG第十二章:以簇方式存储数据对象22使用EXPORTTOMEMORY语句在内存中存储数据对象。使用IMPORTFROMMEMORY语句从内存中读取数据对象。使用FREEMEMORY语句从内存中删除数据簇。在ABAP/4内存中存储数据对象要将数据对象从ABAP/4程序写入ABAP/4内存,请使用下列语句:语法EXPORTF1[FROMg1]F2[FROMg2]...TOMEMORYIDkey.此语句将列表中指定的数据对象存储为ABAP/4内存中的数据簇。如果忽略选项FROMgi,则将数据对象fi存储到自己的名称之下。如果使用该选项,则将数据对象gi存储到fi下面。IDkey用于标识内存数据,不得超过32个字符。EXPORT语句总是完全改写IDkey相同的任何现有数据簇的内容。对于有表头行的内表,只可以存储表本身,而不能存储表头行。在EXPORT语句中,将表名解释为表。这是例外。通常情况下,语句将表名解释为表工作区(参见访问内表(页8–4))。PROGRAMSAPMZTS1.DATATEXT1(10)VALUE'Exporting'.DATAITABLIKESBOOKOCCURS10WITHHEADERLINE.DO5TIMES.ITAB-BOOKID=100+SY-INDEX.APPENDITAB.ENDDO.EXPORTTEXT1TEXT2FROM'Literal'TOMEMORYID'text'.EXPORTITABTOMEMORYID'table'.在此示例中,文本字段TEXT1和TEXT2存储到程序SAPMZTS1的ABAP/4内存的ID“文本”之下,内表ITAB则存储到ID“表”中。从内存中读取数据对象SAPAG第十二章:以簇方式存储数据对象33要将ABAP/4内存中的数据对象读到ABAP/4程序中,请使用下列语句:语法IMPORTF1[TOg1]F2[TOg2]...FROMMEMORYIDkey.此语句从ABAP/4内存的数据簇中读取列表中指定的数据对象。如果忽略选项TOgi,则将内存中的数据对象fi赋给程序中的同名数据对象。如果使用此选项,则将内存中的数据对象fi写入字段gi中。IDkey用于标识内存数据,不得超过32个字符。不必读取存储在特定IDkey下的所有对象。相反,可以从名称fi中进行选择。如果内存中不包含指定IDkey下的对象,则将SY-SUBRC设置为4。但是,如果内存中存在带此ID的数据簇,无论数据对象fi是否也存在,SY-SUBRC之值总是为0。如果簇中不存在数据对象fi,则目标字段保持不变。此语句不进行这种检查:即内存中的对象结构与要写入的结构是否匹配。因为数据是按位进行传送的,所以不匹配的结构可能会引起不一致。PROGRAMSAPMZTS1.DATATEXT1(10)VALUE'Exporting'.DATAITABLIKESBOOKOCCURS10WITHHEADERLINE.DO5TIMES.ITAB-BOOKID=100+SY-INDEX.APPENDITAB.ENDDO.EXPORTTEXT1TEXT2FROM'Literal'TOMEMORYID'text'.EXPORTITABTOMEMORYID'table'.SUBMITSAPMZTS2ANDRETURN.SUBMITSAPMZTS3.程序的第一部分对应于在ABAP/4内存中存储数据对象(页2)中的示例。当前示例也以SUBMIT调用程序SAPMZTS1和SAPMZTS2。通过在ABAP/4编辑器中双击程序名生成和维护SUBMIT后面指定的程序。关于SUBMIT的详细信息,参见调用报表(页Error!Notavalidlink.)。SAPMZTS2的示例:PROGRAMSAPMZTS2.DATA:TEXT1(10),TEXT3LIKETEXT1VALUE'Initial'.IMPORTTEXT3FROMMEMORYID'text'.WRITE:/SY-SUBRC,TEXT3.IMPORTTEXT2TOTEXT1FROMMEMORYID'text'.WRITE:/SY-SUBRC,TEXT1.SAPAG第十二章:以簇方式存储数据对象44SAPMZTS3的示例:PROGRAMSAPMZTS3.DATAJTABLIKESBOOKOCCURS10WITHHEADERLINE.IMPORTITABTOJTABFROMMEMORYID'table'.LOOPATJTAB.WRITE/JTAB-BOOKID.ENDLOOP.输出位于两个连续的屏幕上,如下所示:和SAPMZTS2试图从数据簇“文本”中读取不存在的数据对象TEXT3。因此,目标字段TEXT3保持不变。现有数据对象TEXT2被放到TEXT1之后。两种情况中,因为簇“文本”包含数据,SY-SUBRC都被设置为0。SAPMZTS3将内表ITAB从簇“表”中写入内表JTAB。两个表结构一样,同为ABAP/4词典表SBOOK结构。删除内存中的数据簇要删除ABAP/4内存中的数据对象,请使用下列语句:语法FREEMEMORY[IDkey].如果不附加IDkey,则此语句删除整个内存,包括此前用EXPORT存储到ABAP/4内存中的所有数据簇。附加IDkey之后,该语句只删除用此名称命名的数据簇。因为删除整个内存会导致任何系统例程内存内容的丢失,所以只应使用附加有ID的FREEMEMORY语句。PROGRAMSAPMZTST.DATA:TEXT(10)VALUE'0123456789',IDEN(3)VALUE'XYZ'.SAPAG第十二章:以簇方式存储数据对象55EXPORTTEXTTOMEMORYIDIDEN.TEXT='xxxxxxxxxx'.IMPORTTEXTFROMMEMORYIDIDEN.WRITE:/SY-SUBRC,TEXT.FREEMEMORY.TEXT='xxxxxxxxxx'.IMPORTTEXTFROMMEMORYIDIDEN.WRITE:/SY-SUBRC,TEXT.此示例的输出为:001234567894xxxxxxxxxxFREEMEMORY语句删除数据簇“XYZ”。因此,在下一个IMPORT语句之后,系统字段SY-SUBRC被设置为4,而目标字段保持不变。数据库中的数据簇可以将数据簇存储到ABAP/4词典的特定数据库中。就是所谓的ABAP/4簇数据库,其预定义结构为:该方法允许单步存储任何具有深结构的复杂数据对象,而不必将其调整为关系数据库的平面结构。这样,在整个系统中都可使用该数据对象,并且每个用户都可对其进行访问。要使访问成功,必须知道存储对象的数据类型。在簇数据库中存储数据,对于支持有关关系数据库信息的分析结果十分有用。例如,如果要从所有分支机构的人员数据中生成销售额昀高的客户清单或者完整的通讯录,就可以编写ABAP/4程序,让程序来解决此类问题,并将结果存储为数据簇。如果需要刷新存储的数据簇,可以在后台定期运行这些程序。要使用该结果,可以使用只访问该数据簇的其他程序。因为不必在每次使用结果时都访问关系数据库中的分布式数据,并且也不必每次都重新生成结果,所以,此方法可以很大程度上减少系统的响应时间。存储数据簇是专就ABAP/4而言。尽管也可以使用SQL语句访问簇数据库,但是,只有ABAP/4语句能够对已存储的数据簇结构进行解码。使用EXPORTTODATABASE语句将数据对象存储到簇数据库中。使用IMPORTFROMDATABASE语句为数据簇生成目录表,并从簇数据库中读取数据对象。使用DELETEFROMDATABASE语句从簇数据库中删除数据簇。关于使用开放式SQL语句访问簇数据库的信息,参见簇数据库簇数据库是ABAP/4词典中的特殊数据库。用于存储数据簇。其行结构被划分为部分标准化的
本文标题:中文培训教材第一部分第十二章 以簇方式存 储数据对象
链接地址:https://www.777doc.com/doc-964377 .html