没有合适的资源?快使用搜索试试~ 我知道了~
首页SAP ABAP 动态语句详解
SAP ABAP 动态语句详解
5星 · 超过95%的资源 需积分: 50 24 下载量 146 浏览量
更新于2023-03-16
评论 1
收藏 259KB DOC 举报
详细介绍ABAP里面动态语句的写法 FIELD-SYMBOLS 申明的类型详解
资源详情
资源评论
资源推荐
将数据对象 分配给字段 符号
在使用字段 符号之前必 须先分配数 据对象给它 。对于结构 化字段符号 ,必须在定 义中包括这 个分配(参 见定义
结构化字段符号)。对于 非结构化字 段符号,可 以自由决定 何时何地首 次分配数据 对象。在程 序中,不管 字段符
号是 否结构化, 都可以将不 同的数据对 象分配给同 样的字段符 号。
要给字段符 号分配数据 对象,可以 使用 ASSIGN 语句。ASSIGN 语句有几个 变量和参数 。下列主题 说明:
ASSIGN 语句的基本格式
将字段符号分配给其它字段符号
分配字段串组件
定义字段符号的数据类型
更改小数位
分配全局字段的局部副本
ASSIGN 语句的基本 格式
ASSIGN 语句的基本 格式包含两 个静态变量 和两个动态 变量。
静态 ASSIGN
具有偏移量说明的静态 ASSIGN
动态 ASSIGN
表工作区的动态分配
静态 ASSIGN
如果运行之 前知道想要 分配给字段 符号的数据 对象的名称 ,则如下使 用 ASSIGN 语句:
语法
ASSIGN <f> TO <FS>.
分配之后, 字段符号 <FS> 具有数据对 象 <f> 的属性,并 指向相同的 内存区。
FIELD-SYMBOLS: <F1>, <F2> TYPE I.
DATA: TEXT(20) TYPE C VALUE 'Hello, how are you?',
NUM TYPE I VALUE 5,
BEGIN OF LINE1,
COL1 TYPE F VALUE '1.1e+10',
COL2 TYPE I VALUE '1234',
END OF LINE1,
LINE2 LIKE LINE1.
ASSIGN TEXT TO <F1>.
ASSIGN NUM TO <F2>.
DESCRIBE FIELD <F1> LENGTH <F2>.
WRITE: / <F1>, 'has length', NUM.
ASSIGN LINE1 TO <F1>.
ASSIGN LINE2-COL2 TO <F2>.
MOVE <F1> TO LINE2.
ASSIGN 'LINE2-COL2 =' TO <F1>.
WRITE: / <F1>, <F2>.
输出如下:
Hello, how are you? has length 20
LINE-COL2 = 1,234
示例定义两 个字段符号 <F1> 和 <F2>。 因为 <F2> 的类型指定 为 I,它只能 指向 I 类型字段。 在示例教程 中 <F1>
和 <F2> 指向几个不 同的数据对 象。
具有偏移量 说明的静态 ASSIGN
通过使用下 列 ASSIGN 语句,可以 指定要分配 给字段符号 的字段的偏 移值:
语法:
ASSIGN <f>[+<o>][(<l>)] TO <FS>.
正如在 指定数据对象的偏移量中所描述的 ,具有偏移 量 <o> 和长度 <l> 的 <f> 部分被分配 给字段符号 <FS>。 在
ASSIGN 语句中,偏 移量的说明 有下列特殊 特征:
2 <o> 和 <l> 可以是变量
2 系统不检 查所选部分 是否位于字 段 <f> 内部。偏移 量 <o> 和 长度 <l> 都可以比 <f> 的长度大。 写地址时, 可以超
出 <f> 的限制,但 不能超出所 定义内存区 (参见 运行检查)。
2 如果没有 指定长度 <l>,系 统自动输入 字段 <f> 的长度。如 果 <o> 大于零,<FS> 总是指向超 出 <f> 限制的区域 。
2 如果<o>小 于<f> 的长度,可 以为 <l> 指定一个星 号 (*) 来阻止 <FS> 参照 <f> 限制之外的 区域。
FIELD-SYMBOLS <FS>.
DATA: BEGIN OF LINE,
STRING1(10) VALUE '0123456789',
STRING2(10) VALUE 'abcdefghij',
END OF LINE.
WRITE / LINE-STRING1+5.
ASSIGN LINE-STRING1+5 TO <FS>.
WRITE / <FS>.
ASSIGN LINE-STRING1+5(*) TO <FS>.
WRITE / <FS>.
输出如下:
56789
56789abcde
56789
该示例中, 可以看到 WRITE 语句和 ASSIGN 语句中的偏 移量说明的 区别。对于 WRITE, 在 LINE-STRING1 端部
截短了 输出。如果 指定偏移量 大于 9,将导致 语法检查时 出错。在第 一个 ASSIGN 语句中,将 LINE-STRING1中
以偏移量 5开头长度 为 10 的内存区域 分配给字段 符号 <FS>。 因为程序中 明确定义了 LINE-STRING1 后面的内存
区,所以这 将导致很有 意义的输出 结果。在第 二个 ASSIGN语 句中,避免 了 LINE-STRING1 边界后面的 内存分配。
FIELD-SYMBOLS <FS>.
DATA: BEGIN OF LINE,
A VALUE '1', B VALUE '2', C VALUE '3', D VALUE '4',
E VALUE '5', F VALUE '6', G VALUE '7', H VALUE '8',
END OF LINE,
OFF TYPE I,
LEN TYPE I VALUE 2.
DO 2 TIMES.
OFF = SY-INDEX * 3.
ASSIGN LINE-A+OFF(LEN) TO <FS>.
<FS> = 'XX'.
ENDDO.
DO 8 TIMES.
OFF = SY-INDEX - 1.
ASSIGN LINE-A+OFF(1) TO <FS>.
WRITE <FS>.
ENDDO.
输出如下:
1 2 3 X X 6 X X
该示例中, 可以看到字 段符号是如 何方便访问 和规则字段 串的处理的 。然而,请 注意,这种 处理字段限 制范围
之外 内存内容的 灵活方法也 有其危险性 ,可能导致 运行错误。
动态ASSIGN
如果仅在运 行时才知道 要分配给字 段符号的数 据对象名称 ,请使用下 列 ASSIGN 语句:
语法
ASSIGN (<f>) TO <FS>.
这个语句将 名称包含在 <f> 中的字段分 配给字段符 号 <FS>。 对(<f>) 不能指定偏 移量。
运行时,系 统按下列顺 序搜索给定 的字段:
1. 如果 分配是在子 程序或功能 模块中执行 的,系统将 在局部数据 的子程序或 功能模块中 搜索字段。
2. 如果 分配是在子 程序或功能 模块之外执 行的,或者 在其中未找 到字段,则 系统将在程 序的全局数 据中搜索字 段。
3. 如果 在全局数据 中未发现此 字段,系统 将在表工作 区中搜索, 该表工作区 是指当前程 序组的主程 序中 TABLES
语句声明的 表工作区。 程序组由主 程序和包含 外部子程序 的定义的所 有程序组成 ,这些外部 子程序被主 程序调
用( 包括被嵌套 的程序)。
由于这种搜 索对响应时 间有负面效 应,只有绝 对必要时, 才可使用动 态 ASSIGN。 如果在运行 之前知道只 分配
表工作 区,则可以 使用在 表工作区的动态分配 中所描述的 ASSIGN 语句的变量 。
如果搜索成 功并且字段 可分配给字 段符号,则 SY-SUBRC 设为 0。否则, 返回 4。为安全 起见,动态 ASSIGN 之
后总要检 查 SY-SUBRC 的值,以避 免字段符号 指向未定义 区域。
假设主程序 SAPMZTST 如下:
PROGRAM SAPMZTST.
TABLES SBOOK.
SBOOK-FLDATE = SY-DATUM.
PERFORM FORM1(MYFORMS1).
假设还调用 两个程序 MYFORMS1 和 MYFORMS2:
PROGRAM MYFORMS1.
FORM FORM1.
PERFORM FORM2(MYFORMS2).
ENDFORM.
和
PROGRAM MYFORMS2.
FORM FORM2.
DATA NAME(20) VALUE 'SBOOK-FLDATE'.
FIELD-SYMBOLS <FS>.
ASSIGN (NAME) TO <FS>.
IF SY-SUBRC EQ 0.
WRITE / <FS>.
ENDIF.
ENDFORM.
执行 SAPMZTST 之后,输出 显示如下:
08.02.1995
该示例中, 程序组由 SAPMZTST、 MYFORMS1 和 MYFORMS2 组成。在 MYFORMS2 中定义字段 符号 <FS>。 动
态 ASSIGN 语句之后, 指向主程序 SAPMZTST 中声明的表 工作区的组 件 FLDATE。 用静态 ASSIGN 语句,这是
不可能的。 换句话说, 不能用 SBOOK-FLDATE 替代 (NAME), 因为语法检 查时将导致 错误。
created with Help to RTF le format converter
表工作区的 动态分配
如果运行之 前知道要将 表工作区分 配给字段符 号,但不知 道表区的名 称,请使用 动态 ASSIGN 语句的下列 变量:
语法
ASSIGN TABLE FIELD (<f>) TO <FS>.
系统仅在表 工作区中搜 索要分配给 字段符号的 数据对象, 该表工作区 是由当前程 序组的主程 序中 TABLES 语句
声明的 。即,系统 仅执行在 动态 ASSIGN所描述的搜 索的第三步 。
如果搜索成 功,并且可 以分配字段 给字段符号 ,则 SY-SUBRC 设为 0。否则返 回 4。
TABLES SBOOK.
DATA: NAME1(20) VALUE 'SBOOK-FLDATE',
NAME2(20) VALUE 'NAME1'.
FIELD-SYMBOLS <FS>.
ASSIGN TABLE FIELD (NAME1) TO <FS>.
WRITE: / 'SY-SUBRC:', SY-SUBRC.
ASSIGN TABLE FIELD (NAME2) TO <FS>.
WRITE: / 'SY-SUBRC:', SY-SUBRC.
输出如下:
SY-SUBRC: 0
SY-SUBRC: 4
在第一个 ASSIGN 语句中,系 统发现表工 作区 SBOOK 和 SY-SUBRC 的组件 FLDATE 被设为 0。第二个 ASSIGN 语
句中,系 统没有发现 字段 NAME1, 因为它只被 DATA 语句声明, 而不是被 TABLES 语句声明。 在这种情形 ,
SY-SUBRC 返回 4。
将字段符号 分配给其它 字段符号
除了使用数 据对象的名 称外,还可 以将字段符 号分配给 ASSIGN 语句的所有 变量中的字 段符号。为 此,编码静
态 ASSIGN 如下:
语法
ASSIGN <FS1>[+<o>][(<l>)] TO <FS2>.
可按下列方 式编码动态 ASSIGN:
语法
ASSIGN [TABLE FIELD] (<f>) TO <FS2>.
字段 <f> 包含字段符 号 <FS1> 的名称。
<FS1> 和 <FS2> 可以相同。
DATA: BEGIN OF S,
A VALUE '1', B VALUE '2', C VALUE '3', D VALUE '4',
E VALUE '5', F VALUE '6', G VALUE '7', H VALUE '8',
END OF S.
DATA OFF TYPE I.
FIELD-SYMBOLS <FS>.
ASSIGN S-A TO <FS>.
DO 4 TIMES.
OFF = SY-INDEX - 1.
ASSIGN <FS>+OFF(1) TO <FS>.
WRITE <FS>.
ENDDO.
输出如下:
1 2 4 7
该示例中, 创建八个字 段作为字符 串 S 的组件 S-A 到 S-H,并 用“1”到 “8”填充 。这些字符 串在内存中 有规律的存
储。组件 S-A 初始分配给 字段符号 <FS>。 循环语句中 有下列结果 :
循环途径 1:
剩余19页未读,继续阅读
dreamskyuu
- 粉丝: 0
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
- MW全能培训汽轮机调节保安系统PPT教学课件.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1