以簇方式存储数据对象(doc14).doc

上传人:3d66 文档编号:1160791 上传时间:2018-12-08 格式:DOC 页数:14 大小:123.47KB
返回 下载 相关 举报
以簇方式存储数据对象(doc14).doc_第1页
第1页 / 共14页
以簇方式存储数据对象(doc14).doc_第2页
第2页 / 共14页
以簇方式存储数据对象(doc14).doc_第3页
第3页 / 共14页
亲,该文档总共14页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《以簇方式存储数据对象(doc14).doc》由会员分享,可在线阅读,更多相关《以簇方式存储数据对象(doc14).doc(14页珍藏版)》请在三一文库上搜索。

1、 1以簇方式存 储数据对象概览内容ABAP/4 内存中的数 据簇在 ABAP/4 内存中存储 数据对象从内存中读 取数据对象删除内存中 的数据簇数据库中的 数据簇簇数据库在簇数据库 中存储数据 对象创建数据簇 目录表从簇数据库 中读取数据 对象从簇数据库 中删除数据 簇用开放式 SQL 语句访问簇 数据库可以用数据 簇方式对 ABAP/4 程序的任何 复杂内部数 据对象进行 分组保存, 并将其临时 存储在 ABAP/4 内存中,或 长时间存储 在数据库中 。在下列主题 中,您将学 到更多有关 在内存和数 据库中存储 数据簇的知 识1ABAP/4 内存中的数 据簇可以在 ABAP/4 内存中存储

2、 数据簇。ABAP/4 内存是分配 给特定事务 的存储区, 任何模块都 是用关键词 CALL 或 SUBMIT 从中进行调 用的。关于 事务流的详 细信息,参 见编写 ABAP/4事务 (页 Error! Not a valid link.) 。ABAP/4 内存与在事 务期间生成 该内存的 ABAP/4 程序或程序 模块无关。 这意味着在 同一事务中 ,存储在 ABAP/4 内存中的对 象可由任何 ABAP/4 程序重新读 取。但本节 所说的 ABAP/4 内存与不受 事务限制的 全局 SAP 内存不同( 对于示例, 参见 将 SPA/GPA 参数传送到 事务 (页 Error! Not a

3、 valid link.) )。ABAP/4 内存允许跨 越多个程序 层次,在不 同模块化单 元之间进行 数据传递。 例如,可以 在下列单元 之间传递数 据:_ 报表和其 他 SUBMIT 调用的报表_ 事务和报 表_ 不同对话 模块_ 程序和功 能模块等等。离开事务后 ,就释放该 内存。使用 EXPORT TO MEMORY 语句在内存 中存储数据 对象。使用 IMPORT FROM MEMORY 语句从内存 中读取数据 对象。使用 FREE MEMORY 语句从内存 中删除数据 簇。2在 ABAP/4 内存中存储 数据对象要将数据对 象从 ABAP/4 程序写入 ABAP/4 内存,请使

4、用下列语句 :语法EXPORT FROM FROM . TO MEMORY ID .此语句将列 表中指定的 数据对象存 储为 ABAP/4 内存中的数 据簇。如果 忽略选项 FROM , 则将数据对 象 存储到自己 的名称之下 。如果使用 该选项,则 将数据对象 存储到 下面。 ID 用于标识内 存数据,不 得超过 32 个字符。EXPORT 语句总是完 全改写 ID 相同的任何 现有数据簇 的内容。对于有表头 行的内表, 只可以存储 表本身,而 不能存储表 头行。在 EXPORT 语句中,将 表名解释为 表。这是例 外。通常情 况下,语句 将表名解释 为表工作区 (参见访问内表 (页 84)

5、 )。PROGRAM SAPMZTS1.DATA TEXT1(10) VALUE Exporting.DATA ITAB LIKE SBOOK OCCURS 10 WITH HEADER LINE.DO 5 TIMES. ITAB-BOOKID = 100 + SY-INDEX. APPEND ITAB.ENDDO.EXPORT TEXT1 TEXT2 FROM Literal TO MEMORY ID text.EXPORT ITAB TO MEMORY ID table.在此示例中 ,文本字段 TEXT1 和 TEXT2 存储到程序 SAPMZTS1 的 ABAP/4 内存的 ID “文本

6、”之 下,内表 ITAB 则存储到 ID “表”中。2从内存中读 取数据对象要将 ABAP/4 内存中的数 据对象读到 ABAP/4 程序中,请 使用下列语 句:语法IMPORT TO TO . FROM MEMORY ID .此语句从 ABAP/4 内存的数据 簇中读取列 表中指定的 数据对象。 如果忽略选 项 TO , 则将内存中 的数据对象 赋给程序中 的同名数据 对象。如果 使用此选项 ,则将内存 中的数据对 象 写入字段 中。 ID 用于标识内 存数据,不 得超过 32 个字符。不必读取存 储在特定 ID 下的所有对 象。相反, 可以从名称 中进行选择 。如果内存 中不包含指 定 I

7、D 下的对象, 则将 SY-SUBRC 设置为 4。但是, 如果内存中 存在带此 ID 的数据簇, 无论数据对 象 是否也存在 ,SY-SUBRC 之值总是为 0。如果簇 中不存在数 据对象 , 则目标字段 保持不变。此语句不进 行这种检查 :即内存中 的对象结构 与要写入的 结构是否匹 配。因为数 据是按位进 行传送的, 所以不匹配 的结构可能 会引起不一 致。PROGRAM SAPMZTS1.DATA TEXT1(10) VALUE Exporting.DATA ITAB LIKE SBOOK OCCURS 10 WITH HEADER LINE.DO 5 TIMES. ITAB-BOOK

8、ID = 100 + SY-INDEX. APPEND ITAB.ENDDO.EXPORT TEXT1 TEXT2 FROM Literal TO MEMORY ID text.EXPORT ITAB TO MEMORY ID table.SUBMIT SAPMZTS2 AND RETURN.SUBMIT SAPMZTS3.程序的第一 部分对应于在 ABAP/4 内存中存储 数据对象 (页 ) 中的示例。 当前示例也 以 SUBMIT 调用程序 SAPMZTS1 和 SAPMZTS2。 通过在 ABAP/4 编辑器中双 击程序名生 成和维护 SUBMIT 后面指定的 程序。关于 SUBMIT

9、的详细信息 ,参见调用报表 (页 Error! Not a valid link.) 。SAPMZTS2 的示例:PROGRAM SAPMZTS2.DATA: TEXT1(10), TEXT3 LIKE TEXT1 VALUE Initial.IMPORT TEXT3 FROM MEMORY ID text.WRITE: / SY-SUBRC, TEXT3.IMPORT TEXT2 TO TEXT1 FROM MEMORY ID text.WRITE: / SY-SUBRC, TEXT1.SAPMZTS3 的示例:PROGRAM SAPMZTS3.DATA JTAB LIKE SBOOK OC

10、CURS 10 WITH HEADER LINE.IMPORT ITAB TO JTAB FROM MEMORY ID table.LOOP AT JTAB. WRITE / JTAB-BOOKID.ENDLOOP.输出位于两 个连续的屏 幕上,如下 所示:和SAPMZTS2 试图从数据 簇“文本” 中读取不存 在的数据对 象 TEXT3。 因此,目标 字段 TEXT3 保持不变。 现有数据对 象 TEXT2 被放到 TEXT1 之后。两种 情况中, 因为簇“文 本”包含数 据,SY-SUBRC 都被设置为 0。SAPMZTS3 将内表 ITAB 从簇“表” 中写入内表 JTAB。 两个表结构

11、 一样,同为 ABAP/4 词典表 SBOOK 结构。4删除内存中 的数据簇要删除 ABAP/4 内存中的数 据对象,请 使用下列语 句:语法FREE MEMORY ID .如果不附加 ID , 则此语句删 除整个内存 ,包括此前 用 EXPORT 存储到 ABAP/4 内存中的所 有数据簇。 附加 ID 之后,该语 句只删除用 此名称命名 的数据簇。因为删除整 个内存会导 致任何系统 例程内存内 容的丢失, 所以只应使 用附加有 ID 的 FREE MEMORY 语句。PROGRAM SAPMZTST.DATA: TEXT(10) VALUE 0123456789, IDEN(3) VALU

12、E XYZ.EXPORT TEXT TO MEMORY ID IDEN.TEXT = xxxxxxxxxx.IMPORT TEXT FROM MEMORY ID IDEN.WRITE: / SY-SUBRC, TEXT.FREE MEMORY.TEXT = xxxxxxxxxx.IMPORT TEXT FROM MEMORY ID IDEN.WRITE: / SY-SUBRC, TEXT.此示例的输 出为: 0 0123456789 4 xxxxxxxxxxFREE MEMORY 语句删除数 据簇“XYZ” 。因此,在 下一个 IMPORT 语句之后, 系统字段 SY-SUBRC 被设置为 4

13、,而目标 字段保持不 变。5数据库中的 数据簇可以将数据 簇存储到 ABAP/4 词典的特定 数据库中。 就是所谓的 ABAP/4 簇数据库, 其预定义结 构为:该方法允许 单步存储任 何具有深结 构的复杂数 据对象,而 不必将其调 整为关系数 据库的平面 结构。这样 ,在整个系 统中都可使 用该数据对 象,并且每 个用户都可 对其进行访 问。要使访 问成功,必 须知道存储 对象的数据 类型。在簇数据库 中存储数据 ,对于支持 有关关系数 据库信息的 分析结果十 分有用。例 如,如果要 从所有分支 机构的人员 数据中生成 销售额最高 的客户清单 或者完整的 通讯录,就 可以编写 ABAP/4

14、程序,让程 序来解决此 类问题,并 将结果存储 为数据簇。 如果需要刷 新存储的数 据簇,可以 在后台定期 运行这些程 序。要使用 该结果,可 以使用只访 问该数据簇 的其他程序 。因为不必 在每次使用 结果时都访 问关系数据 库中的分布 式数据,并 且也不必每 次都重新生 成结果,所 以,此方法 可以很大程 度上减少系 统的响应时 间。存储数据簇 是专就 ABAP/4 而言。尽管 也可以使用 SQL 语句访问簇 数据库,但 是,只有 ABAP/4 语句能够对 已存储的数 据簇结构进 行解码。使用 EXPORT TO DATABASE 语句将数据 对象存储到 簇数据库中 。使用 IMPORT

15、FROM DATABASE 语句为数据 簇生成目录 表,并从簇 数据库中读 取数据对象 。使用 DELETE FROM DATABASE 语句从簇数 据库中删除 数据簇。关于使用开 放式 SQL 语句访问簇 数据库的信 息,参见6簇数据库簇数据库是 ABAP/4 词典中的特 殊数据库。 用于存储数 据簇。其行 结构被划分 为部分标准 化的开始区 (由多个字 段组成)和 一个用于存 储数据的大 的区域。下列主题介 绍建立簇数 据库的规则 ,同时还就 系统定义的 簇数据库 INDX 进行讨论。6簇数据库的 结构簇数据库的 结构如下所 示:建立簇数据 库的规则如 下所述。必 须创建第一 点到第四点

16、中列出的关 键字段。上 述数据类型 都是 ABAP/4 词典类型。1.如果 该表是针对 客户的,第 一个字段必 须这样定义 :名称为 MANDT, 类型为 CHAR, 长度为 3 字节,用于 存储客户 ID。存储 数据簇时, 系统既可自 动使用当前 客户填写字 段 MANDT, 还可使用 EXPORT 语句中显式 指定的客户 进行填写。2.下一 字段(对于 与客户无关 的表,这是 第一个字段 )必须这样 定义:名称 为 RELID, 类型为 CHAR, 长度为 2 字节。该字 段包含区域 ID。簇数 据库被分成 不同的区域 。存储数据 簇时,系统 用 EXPORT 语句中指定 的区域 ID 填

17、写字段 RELID。3.下一 字段类型为 CHAR, 长度可变。 它包含簇的 名称 , 存储数据簇 时,在程序 中用 EXPORT 语句的附加 ID 指定了该簇 。因为后面 的字段要对 齐,所以系 统应最多使 用 3 个未用字节 填充在字段 RELID 的结尾。如 果创建自己 的簇数据库 ,应该相应 地定义此字 段的长度。4.下一 字段必须名 称为 SRTF2, 类型为 INT4, 长度为 4。单个数 据簇可以扩 展到数据库 表的好几行 中。在理论 上,每个簇 可能有 2*31 行。字段 SRTF2 包含存储的 数据簇内行 的顺序号码 ,可以是 0 和 2*31-1 之间的任何 值。存储数 据

18、簇时,系 统自动填写 此字段(参 见第 7 点)。5.SRTF2 的后面可以 是任何数目 的数据字段 ,这些字段 名称和类型 可任意交换 。存储数据 簇时,系统 并不自动填 写这些字段 。必须在程 序中的 EXPORT 语句之前将 值显式分配 到这些字段 。通常包含 诸如程序名 、用户 ID 等控制信息 。6.行上 的倒数第二 个字段名称 必须为 CLUSTR, 类型为 INT2, 并且长度必 须为 2。它包含 后面的字段 CLUSTD 中的数据长 度。存储数 据簇时,系 统自动填写 此字段。7.行上 的最后一个 字段必须名 称为 CLUSTD, 类型为 VARC。 其长度可以 任意,但通 常

19、为 1000 个字节左右 。存储数据 簇时,系统 按压缩格式 用实际数据 填写此字段 。如果 CLUSTD 的长度不足 以存储簇数 据,则数据 就被分布到 多行上。这 些行在字段 SRTF2 中进行编号 (参见上面 的第 4 点)。既可以按照 上述规则创 建自己的簇 数据库(此 时参见文档 ABAP/4 词典 (页 Error! Not a valid link.) ),也可以 使用系统定 义的簇数据 库 INDX:簇数据库的 示例 (页 ) 7簇数据库的 示例数据库 INDX 是簇数据库 的示例,是 系统中所包 含的标准安 装的一部分 。从用户应 用的角度考 虑,由于没 有必要先创 建新的簇

20、数 据库,所以 ,比较实用 。而且,所 有用户都可 以访问存储 在这里的数 据,并且还 可更改或删 除。要在 ABAP/4 编辑器中查 看数据库 INDX 的结构,请 选择“编辑 - 详细功能 - 命令条目” ,然后输入 SHOW INDX, 或者双击 INDX, 例如在 TABLES 语句中。对于每个字 段,都将看 到 ABAP/4 词典数据类 型和相应的 ABAP/4 编程语言的 数据类型( 也就是 TABLES 生成的表工 作区中的组 件数据类型 )。头四个字段 是表 INDX 的关键字段 ,并且与 簇数据库的 结构 (页 ) 中介绍的完 全相同。此 处簇名的第 三个字段的 名称是 SR

21、TFD, 长度为 22 字节,也就 是说,对于 INDX, ABAP/4 程序中以 EXPORT 语句的附加 ID 指定的名称 最多可以有 22 个字符。后七个字段 是非标准字 段,用于用 户输入,例 如:_ AEDAT: 最后修改的 日期_ USERA: 用户名_ PGMID: 程序名最后两个字 段也是预定 义的。在表 INDX 中,存储实 际数据簇的 字段 CLUSTD 的长度为 2886 个字节。有关表 INDX 用法的示例 ,参见在簇数据库 中存储数据 对象 (页 ) 创建数据簇 目录表 (页 ) 从簇数据库 中读取数据 对象 (页 ) 从簇数据库 中删除数据 簇 (页 ) 7在簇数据

22、库 中存储数据 对象要在簇数据 库中存储 ABAP/4 程序的数据 对象,请使 用下列语句 :语法EXPORT FROM FROM . TO DATABASE () CLIENT ID .此语句将列 表中指定的 数据对象存 储为簇数据 库 中的簇。必 须用 TABLES 语句对 加以声明。 如果不附加 FROM , 则将数据对 象 存储在自己 的名称之下 。如果有附 件项,则将 数据对象 存储到名称 之下。 是存储数据 库的簇的两 字符区域 ID。(参 见 簇数据库的 结构 (页 Error! Not a valid link.) 簇数据库的 结构 (页 Error! Not a valid

23、link.) 下的第 2 点)。 标识数据库 中的数据, 其最大长度 取决于 中名称字段 的长度。( 参见 簇数据库的结构 (页 ) 下面的第 3 点)。在处理特定 客户的簇数 据库时可以 使用选项 CLIENT 关闭自动客 户处理,然 后自己指定 客户。必须 在指定数据 库名称之后 立即指定此 选项。(参 见 簇数据库的结构 (页 ) 下面的第 1 点)。EXPORT 语句也将表 工作区 的用户字段 内容传输到 数据库表。 根据需要, 可以预先填 写这些字段 。(参见 簇数据库的结构 (页 ) 下面的第 5 点)。在具有相同 名称 的相同工作 区 和相同客户 系统 中,EXPORT 语句总是

24、完 全改写任何 现有数据簇 的内容。对于含有表 头行的内表 ,只可以存 储表本身, 而不能存储 表头行。在 EXPORT 语句中,将 表名解释为 表。这是例 外。通常将 表名解释为 表工作区( 参见 访问内表 (页 84) )。PROGRAM SAPMZTS1.TABLES INDX.DATA: BEGIN OF ITAB OCCURS 100, COL1 TYPE I, COL2 TYPE I, END OF ITAB.DO 3000 TIMES. ITAB-COL1 = SY-INDEX. ITAB-COL2 = SY-INDEX * 2. APPEND ITAB.ENDDO.INDX-A

25、EDAT = SY-DATUM.INDX-USERA = SY-UNAME.INDX-PGMID = SY-REPID.EXPORT ITAB TO DATABASE INDX(HK) ID Table.WRITE: SRTF2, AT 20 AEDAT, AT 35 USERA, AT 50 PGMID.ULINE.SELECT * FROM INDX WHERE RELID = HK AND SRTFD = Table. WRITE: / INDX-SRTF2 UNDER SRTF2, INDX-AEDAT UNDER AEDAT, INDX-USERA UNDER USERA, INDX

26、-PGMID UNDER PGMID.ENDSELECT.使用 3000 行填写了内 表 ITAB, 并且,在给 INDX 的某些用户 字段赋值之 后,ITAB 被输出到 INDX。因为 INDX 是关系数据 库,所以可 以使用开放 式 SQL 语句定位单 独行。使用 SELECT 语句,辅以 适当的 WHERE 条件就可选 择用 EXPORT 存储的行。数据库字段 的输出如下 所示:其中,输出 表明用户字 段 AEDAT、 USERA 和 PGMID 由 EXPORT 传送,并且 包含 ITAB 的数据簇扩 展了 6 行。如果在 DO 语句中更改 数目 3000, 则此数据簇 占用的行数 也

27、会发生变 化。9创建数据簇 目录表要从 ABAP/4 簇数据库中 创建数据簇 目录表,请 使用下列语 句:语法IMPORT DIRECTORY INTO FROM DATABASE () CLIENT ID .此语句在存 储于数据库 中的数据簇 中创建一系 列数据对象 ,并将其放 到表 中。必须使 用 TABLES 语句声明 。 要将数据簇 存储到数据 库中,通常 使用 EXPORT TO DATABASE 语句(参见 在簇数据库 中存储数据 对象 (页 ) )。关于数 据库表 结构的详细 信息,参见 簇数据库的 结构 (页 ) 。 是即将存储 数据库的簇 的两字符 ID。 标识数据库 中的数

28、据, 其最大长度 取决于 中名称字段 的长度。在 处理特定客 户的簇数据 库时,可以 使用选项 CLIENT 关闭自动客 户处理,然 后自己指定 客户。必须 在指定数据 库名称之后 立即指定此 选项。IMPORT 语句也自动 从数据库表 中读取表工 作区 的用户字段 内容。如果可以创 建某个目录 表,则把 SY-SUBRC 设置为 0。否则, 设置为 4。必须按照 ABAP/4 词典结构 CDIR 建立内表 。 为此,请使 用 DATA 语句的附件 LIKE( 参见 DATA 语句的基本格式 (页 314) )。结构 CDIR 包含下列组 件:字段名类型说明NAMECHAR在 簇中存储的 对象

29、名称OTYPECHAR对 象类型:F 表示基本字 段R 表示字段串 T 表示内表FTYPECHAR对 象的数据类 型。结构化 的数据类型 是类型 C。TFILLINT4已 填写行的数 目(针对内 表)。FLENGINT2字 段或结构的 长度。PROGRAM SAPMZTS2.TABLES INDX.DATA DIRTAB LIKE CDIR OCCURS 10 WITH HEADER LINE.IMPORT DIRECTORY INTO DIRTAB FROM DATABASE INDX(HK) ID Table.IF SY-SUBRC = 0. WRITE: / AEDAT:, INDX-A

30、EDAT, / USERA:, INDX-USERA, / PGMID:, INDX-PGMID. WRITE / Directory:. LOOP AT DIRTAB. WRITE: / DIRTAB-NAME, DIRTAB-OTYPE, DIRTAB-FTYPE, DIRTAB-TFILL, DIRTAB-FLENG. ENDLOOP.ELSE. WRITE Not found.ENDIF.此程序创建 数据簇的目 录表,该数 据簇是用 在簇数据库 中存储数据 对象 (页 ) 中的示例程 序存储的。 其输出如下 所示:内容 DIRTAB 的表含有一 行,该行表 明数据簇包 含名为 ITAB

31、 的内表,表 具有 3000 个长度为 8 个字节的已 填写行。10从簇数据库 中读取数据 对象要将数据对 象从 ABAP/4 簇数据库读 入 ABAP/4 程序中,请 使用下列语 句:语法IMPORT TO TO . FROM DATABASE () CLIENT ID |MAJOR-ID MINOR-ID .此语句从数 据库 中的数据簇 中读取列表 中指定的数 据对象。必 须用 TABLES 语句声明 。如果不附 加 TO , 则将数据库 的数据对象 分配给程序 中的同名数 据对象。如 果不附加此 选项,则将 数据库的数 据对象 写入字段 。要将数据簇 存储到数据 库中,通常 使用 EXP

32、ORT TO DATABASE 语句(参见 在簇数据库 中存储数据 对象 (页 ) )。关于数 据库表 结构的详细 信息,参见 簇数据库的 结构 (页 ) 。 是即将存储 数据库的簇 的两字符区 域 ID。 标识数据库 中的数据, 其最大长度 取决于 中名称字段 的长度。可 以用 MAJOR-ID 代替附加 ID 。 然后,就选 定名称的第 一部分与 相符的数据 簇。如果指 定具有 MAJOR-ID 的附加 MINOR-ID , 则选择名称 的第二部分 (也就是 长度之后的 位置)大于 或等于 的数据簇。 在处理特定 客户簇数据 库时,可以 使用选项 CLIENT 关闭自动客 户处理,然 后自

33、己指定 客户。必须 在输入数据 库名之后立 即指定此选 项。IMPORT 语句也自动 从数据库表 中读取表工 作区 的用户字段 内容。不必读取存 储在特殊名 称 之下的所有 对象,但可 以使用名称 作出选择。 如果数据库 不包含具有 指定关键字 、 和 的对象,则 将 SY-SUBRC 设置为 4。但是, 如果数据库 中存在具有 这些关键字 的数据簇, 那么,无论 是否存在数 据对象 , SY-SUBRC 之值总是为 0。如果簇 中没有数据 对象 , 则目标字段 保持不变。运行时,系 统检查此语 句以查看数 据库中对象 的结构是否 与要写入的 结构相符。 如果不符合 ,将出现运 行时间错误 。

34、类型 C 字段是此规 则的例外, 也可显示在 结构数据字 段结尾。可 以加长、缩 短、附加或 忽略。PROGRAM SAPMZTS3.TABLES INDX.DATA: BEGIN OF JTAB OCCURS 100, COL1 TYPE I, COL2 TYPE I, END OF JTAB.IMPORT ITAB TO JTAB FROM DATABASE INDX(HK) ID Table.WRITE: / AEDAT:, INDX-AEDAT, / USERA:, INDX-USERA, / PGMID:, INDX-PGMID.SKIP.WRITE JTAB:.LOOP AT JT

35、AB FROM 1 TO 5. WRITE: / JTAB-COL1, JTAB-COL2.ENDLOOP.此程序将内 表 JTAB( 用 在簇数据库 中存储数据 对象 (页 ) 中的示例程 序存储)从 簇数据库 INDX 读入内表 JTAB。 INDX 的某些用户 字段输出和 JTAB 的头五行如 下所示:12从簇数据库 中删除数据 簇要从簇数据 库中删除数 据簇,请使 用下列语句 :语法DELETE FROM DATABASE () CLIENT ID .此语句删除 数据库表 中区域为 和名称为 的整个数据 簇。必须用 TABLES 语句对 进行声明。在处理特定 客户簇数据 库时,可以 使

36、用选项 CLIENT 关闭自动客 户处理,然 后自己指定 客户。必须 在输入数据 库名称之后 立即指定此 选项。要将数据簇 存储到数据 库中,通常 使用 EXPORT TO DATABASE 语句(参见 在簇数据库 中存储数据 对象 (页 ) )。关于数 据库表 结构的详细 信息,参见 簇数据库的 结构 (页 ) 。此 DELETE 语句从簇数 据库中删除 被指定数据 簇覆盖的所 有行。如果可以删 除具有指定 关键字的数 据簇,则把 SY-SUBRC 设置为 0。否则, 其值为 4。PROGRAM SAPMZTS4.TABLES INDX.DATA DIRTAB LIKE CDIR OCCUR

37、S 10.IMPORT DIRECTORY INTO DIRTAB FROM DATABASE INDX(HK) ID Table.WRITE: / SY-SUBRC, IMPORT:, SY-SUBRC.DELETE FROM DATABASE INDX(HK) ID Table.WRITE: / SY-SUBRC, DELETE:, SY-SUBRC.IMPORT DIRECTORY INTO DIRTAB FROM DATABASE INDX(HK) ID Table.WRITE: / SY-SUBRC, IMPORT:, SY-SUBRC.此程序删除 用 在簇数据库 中存储数据 对象

38、(页 ) 中的示例程 序存储的数 据簇。如果 启动程序时 存在数据簇 ,则输出如 下所示:SY-SUBRC, IMPORT: 0SY-SUBRC, DELETE: 0SY-SUBRC, IMPORT: 4在第一个 IMPORT 语句中,数 据簇依然存 在。然后成 功地执行 DELETE 语句。在第 二个 IMPORT 语句中,数 据簇不再存 在。13用开放式 SQL 语句访问簇 数据库簇数据库是 在 ABAP/4 词典中定义 的关系数据 库,ABAP/4 以特殊方法 使用该词典 。因此,原 则上说,也 可以使用 寥_ 数据库表 (页 111) 中介绍的开 放式 SQL 语句对其进 行访问。对簇

39、数据库 表,为了有 意义地使用 开放式 SQL 语句,必须 清楚数据库 表的特殊结 构(参见 簇数据库的 结构 (页 ) )。例如,用 SELECT 语句读取字 段 CLUSTR 和 CLUSTID, 或用 UPDATE 语句对其进 行更改,都 毫无意义。 这些字段包 含由系统进 行编码的数 据簇,要对 其进行正确 的处理,只 能使用 EXPORT TO DATABASE 和 IMPORT FROM DATABASE 语句。如果数据簇 语句的特定 组合导致超 时运行,则 只应使用开 放式 SQL 语句 UPDATE、 MODIFY 和 DELETE。 一定不要在 数据簇中使 用开放式 SQL

40、语句 INSERT。可以使用开 放式 SQL 语句维护簇 数据库。例 如,SELECT 语句允许从 簇数据库表 中查看特定 数据簇。其 中,也可以 使用用户数 据字段中的 信息(参见 在簇数据库 中存储数据 对象 (页 ) 中的示例) 。IMPORT FROM DATABASE 语句不适合 此目的。PROGRAM SAPMZTS5.DATA COUNT TYPE I VALUE 0.TABLES INDX.SELECT * FROM INDX WHERE RELID = HK AND SRTF2 = 0 AND USERA = SY-UNAME.DELETE FROM DATABASE IND

41、X(HK) ID INDX-SRTFD.IF SY-SUBRC = 0. COUNT = COUNT + 1. ENDIF.ENDSELECT.WRITE: / COUNT, Cluster(s) deleted.此示例程序 从表 INDX 中删除区域 “HK”( 其中的字段 USERA 包含当前程 序用户名称 )中的所有 数据簇。用 SELECT 语句填写表 工作区 INDX 的字段 SRTFD, 并在 DELETE 语句中使用 。在 WHERE 子句中指定 SRTF2 = 0,可以保 证只对每个 数据簇进行 一次处理。请不要混淆 开放式 SQL 命令集中的 DELETE 语句(参见 从数据

42、库表 中删除行 (页 1135) )和数据簇 的 DELETE 语句(参见 从簇数据库 中删除数据 簇 (页 ) )。删除数 据簇中的数 据时,应该 始终是删除 所有行,而 不仅仅指特 定行。下例说明如 何使用开放 式 SQL 语句 UPDATE 更改数据库 表中的数据 簇名称和区 域。用簇语 句 EXPORT、 IMPORT 和 DELETE 来解决此问 题显得太繁 琐。PROGRAM SAPMZTS5.TABLES INDX.DATA DIRTAB LIKE CDIR OCCURS 10 WITH HEADER LINE.UPDATE INDX SET RELID = NW SRTFD = Internal WHERE RELID = HK AND SRTFD = Table.WRITE: / UPDATE:, / SY-SUBRC:, SY-SUBRC, / SY-DBCNT:, SY-DBCNT.IMPORT DIRECTORY INTO DIRTAB FROM DATABASE INDX(NW) ID Internal.WRITE: / IMPORT:, / SY-SUBRC

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1