保捱科技网
您的当前位置:首页abap基本语法汇总

abap基本语法汇总

来源:保捱科技网
数据类型与对象

在ABAP中,可以使用与标准数据声明相似得语法处理数据类型,而与数据对象无关。

在程序中必须声明要使用得全部数据对象。 声明过程中,必须给数据对象分配属性, 其 中最重要得属性就就是数据类型。

1、1基本数据类型

数据类型 C D F I N P T 默认大小 1 8 8 4 1 8 6 1 有效大小 1 - 65535 8 8 4 1 - 65535 1 - 16 6 1 - 65535 初始值 SPACE '00000000' 0 0 '00、、、0' 0 '000000' X'00' 说明 文本、字符(字母数字字符) 日期(格式:YYYYMMDD 浮点数 整型(整数) 数字文本 压缩号 时间(格式:HHMMSS 十八进制 X 对算术运算得非整型结果(如分数)进行四舍五入,而不就是截断。

类型P数据允许在小数点后有数字。有效大小可以就是从 1到16字节得任何值。将 两个十进制数字压缩到一个字节, 而最后一个字节包含一个数字与符号。 个数字。

在小数点后最多允 许14

1、2系统定义得数据对象

SPACE SY-SUBRC SY-UNAME SY-DATUM SY-UZEIT SY-TCODE SY-INDEX SY-TABIX SY-TMAXL SY-SROWS SY-SCOLS SY-VLINE SY-ULINE SY-PAGNO SY-LINSZ SY-LINCT SY-LISND SY-LISTI SY-LILLI

空白字符串 系统执行传回值,0表示成功 用户 系统日期 系统时间 当前执行程序得 Tran saction code 当前LOOP!环过得次数 当前处理得就是Internal Table( 内部表)得第几行 In ternal Table (内部表)得总行数 屏幕总行数 屏幕总列数 画竖线 画横线 当前页号 当前报表宽度 当前报表长度 列表索引页 上一个列表得索引 绝对列表中选定得行号 屏幕上得行 光标列 SY-CUROW 真实行号 选择行得内容,长度为 255 当前行

1、3确定数据对象得属性

如果要查明数据对象得数据类型,或者要在程序得运行期间使用其属性,可使用 DESCRIBE语句。语法如下:

DESCRIBE FIELD [LENGTH ] [TYPE [COMPONENTS ]]

[OUTPUT-LENGTH ] [DECIMALS ] [EDIT MASK ]

将由语句得参数指定得数据对象 得属性写入参数后得变量。 DESCRIBE FIELDS语句具有下列参数: 参数 LENGTH TYPE OUTPUT-LENGTH DECIMALS

用途 确定字段长度 确定数据类型 确定输出长度 确定小数位 确定转换例程 EDIT MASK 1、3、1确定字段长度

要确定数据对象得长度,利用

DESCRIBE FIELD语句使用LENGTH参数,如下所示:

DESCRIBE FIELD LENGTH

系统读取字段得长度,并将值写入字段 <1>。 1、3、2确定数据类型

要确定字段得数据类型,利用

DESCRIBE FIELD语句使用TYPE参数,如下所示:

DESCRIBE FIELD TYPE [COMPONENTS ]、 系统读取字段得数据类型,然后将值写入字段

除返回预定义数据类型 C、D、F、I、N P、T与X夕卜,该语句还返回 2 2 2

s 对于带前导符号得两字节整型 b 对于无前导符号得一字节整型 h 对于内表

2 C 对于组件中没有嵌套结构得结构 2 C 对于组件中至少有一个嵌套结构得结构 1、3、3确定输出长度

要确定字段得输出长度,利用 所示:

DESCRIBE FIELD语句使用 OUTPUT-LENGTH参数,如下

DESCRIBE FIELD OUTPUT-LENGTH 系统读取字段得输出长度,并将值写入字段 1、3、4确定小数位

若要确定类型 P字段得小数位得个数,禾U用DESCRIBEFIELD语句使用DECIMALS参数, 如下所示:

DESCRIBE FIELD DECIMALS 、 系统读取字段得小数个数,并将值写入字段 1、 3、5确定转换例程

要确定ABAP/4词典中某字段得转换例程就是否存在, DESCRIBE FIELD语句使用 EDIT MASK参数,如下所示:

DESCRIBE FIELD EDIT MASK

如果ABAP/4词典中字段得转换例程存在,则系统将其写入字段,然后将系统字 段SY-SUBRC中得返回代码设为 0。

可以像下面所显示得那样,在

WRITE语句中将字段直接用作格式模板:

如果存在,名称就是什么,利用

。 <0>。

WRITE USING EDIT MASK

如果字段没有转换例程,则系统将返回代码设为

4。

二数据输出到屏幕

2、 1在屏幕上定位 Write输出

通过制定字段名称前面得格式规范,可以在屏幕上定位 WRITE AT [/][][()] 此处

3 斜线‘ /'表示新得一行 3 3

就是最长为三位数字得数字或变量,表示在屏幕上得位置 就是最长为三位数字得数字或变量,表示输出长度

,可以忽略关键字 AT。

WRITE语句得输出:

如果格式规范只包含直接值(即,不就是变量)

2、2格式化选项

对WRITE语句,可以使用不同得格式化选项。 WRITE、、、、< 选项 >、 (1)所有数据类型得格式化选项:

选项 用途 LEFT-JUSTIFIED CENTERED RIGHT-JUSTIFIED UNDER NO-GAP USING EDIT MASK USING NO EDIT MASK NO-ZERO

输出左对齐 输出居中 输出右对齐 输出直接开始于字段<g>下 忽略字段<f>后得空格 指定格式模板<m> 撤消对ABAP/4词典中指定得格式模板得激活。 如果字段仅包含零,则用空格代替它们 对类型C与N字段,将自动代替前导零 (2)数字字段得格式化选项: 选项 NO-SIGN DECIMALS EXPONENT ROUND CURRENCY UNIT 用途 不输出前导符号 <d>定义小数点后得数字位数。 在类型F字段中,在<e>中疋义幂数 用10**(-r) 乘类型P字段,然后取整 按表格TCURX中得货币<c>格式化。 按表格T006中为类型P字段所指定得单位<u>固定小数位 数

(3)日期字段得格式化选项: 选项 DD/MM/YY MM/DD/YY DD/MM/YYYY MM/DD/YYYY DDMMYY MMDDYY

用途 用户主记录中定义得分隔符 用户主记录中定义得分隔符 用户主记录中定义得分隔符 用户主记录中定义得分隔符 无分隔符 无分隔符 无分隔符 YYMMDD 2、3输出符号与图标

使用下列语法,可以在屏幕上输出符号与 WRITE AS ICON

符号与图标得名称( <符号名 >与<图标名 >)就是定义系统得常量, 这些常量在包含程序 <SYMBOL与<ICON>(尖括号就是名称得一部分) 中指定。这些包含程序也包含符号与图标得 简短说明。输出符号与图标最简单得方法就是使用语句结构。

要使符号与图标对程序可用,必须在程序中输入恰当得包含程序或更易理解得包含程序

R/3图标:

2、4输出线与空行

(1)水平线

用下列语法,可以在输出屏幕上生成水平线: ULINE [AT [/][][()]] 、 它等同于

WRITE [AT [/][][()]] SY-ULINE

AT 后得格式规范,与在屏幕上定位 WRITE 输出中为 WRITE 语句说明得格式规范完全 一样。如果没有格式规范,系统则开始新得一行,并用水平线填充该行。否则,只按指定输 出水平线。

生成水平线得另一种方法,就是在 WRITE 语句中键入恰当数量得连字符,如下所示: WRITE [AT [/][][()]] '

、、、 ' 、

( 2)垂直线 用下列语法,可以在输出屏幕上生成垂直线: WRITE [AT [/][]] SY-VLINE 、 或

WRITE [AT [/][]] '|'

(3)空行 用下列语法,可以在输出屏幕上生成空行: SKIP [] 、

该语句从当前行开始,在输出屏幕上生成个空行。如果没有指定得值,就输出一 个空行。 (4)要将输出定位在屏幕得指定行上,使用:

SKIP TO LINE 、 该语句允许将输出位置向上或向下移动。

2、5 将字段内容作为复选框输出 使用下列语法,可以将字段得第一个字符,作为复选框输出到输

出屏幕上: WRITE AS CHECKBOX、

如果字段得第一个字符就是一个“ X ”,就显示复选框已填充。如果字段 得第一 个字符就是SPACE,就显示复选框为空。

该语句创建得复选框, 默认状态就是可输入得。 就就是说, 用户可以通过单击鼠标来填 充它们或使其为空。

在声明语句中, 将初始

三赋值

在 ABAP/4 中,可以在声明语句与操作语句中给数据对象赋值。 值赋给声明得数据对象。为此,可以在

DATA、常量或STATICS语句中使用VALUE参数。

要在操作语句中给数据对象赋值,可以使用:

6 MOVE语句与 WRITE TO语句,对应于赋值运算符(=)

3、1 用 MOVE®值

3、 1、 1 基本赋值操作

要将值(文字)或源字段得内容赋给目标字段, 可以使用MOVE语句或赋值运算符(=)。 MOVE语句得语法如下所示: MOVE TO

MOVE语句将源字段得内容传送给目标字段 °可以就是任何数据对象。 必须就是变量,不能就是文字或常量。传送后, 得内容保持不变。

赋值运算符(=)得语法如下所示: =

MOVE语句与赋值运算符功能相同。 3、 1、 2 用指定偏移量赋值

可以在每条 ABAP/4 语句中为基本数据类型指定偏移量与长度。在这种情况下, 语句语法如下:

MOVE [+][()] TO [+][()]

MOVE

将字段从<。1>+1位置开始且长度为<11>得段内容赋给字段,覆盖从<。2>+1位 置开始且长度为 得段。

在 MOVE 语句中,所有偏移量与长度指定都可为变量。 3、 1、 3 在字符串组件之间赋值

描述得 MOVE 语句赋值方法适用于基本数据对象与结构化数据对象。另外,还有一种 MOVE语句变体,允许将源字段串组件内容复制到目标字段串组件中。语法如下:

MOVE-CORRESPONDING TO

该语句将字段串 组件得内容赋给有相同名称得字段串 组件。 对于每对名称,系统都执行 MOVE 语句,如下所示:

MOVE STRING1- TO STRING2-、 系统分别执行所有必要类型转换。 该处理不同于包括整个字段串得赋值。 在这种情况下, 应用不兼容得字段串与基本字段所述得转换规则。

3、2 用 WRITE TO赋值

要将值(文字)或源字段内容写入目标字段,可以使用 WRITE TO 语句: WRITE TO []

WRITETO语句将源字段内容写入目标字段可以就是任何数据对象, 必须就是变量,不能就是文字或常量。写入后,

内容保持不变。

UNDER与NO-GAP除外)。

对于

WRITE TO语句总就是检查用户主记录中得设置。例如,这些设置指定就是将小数点显 示为句号(、),还就是逗号(,)。

WRITETO语句并不遵循类型转换中所述得转换规则。目标字段解释为类型

C字段。系

而直

统总就是将源字段内容转换为类型 C,它不将结果字符串转换为目标字段得数据类型, 接写入目标字段。因此,不应使用数值数据类型得目标字段。 3、2、1运行时指定源字段

可以使用 WRITE TO语句在运行时指定源段。为此,需用括号将包含源字段名得数据对 象名括起来,并将其放在源字段位置:

WRITE () TO

系统将赋给得数据对象值放到中。

然而,如果要在运行时指定目标字段,则必须按使用字段符号中所述,使用字段符号。 3、2、2用指定偏移量写入值

可以指定每条 ABAP/4语句中基本数据对象得偏移量与长度。 WRITE [+][()] TO [+][()]

WRITETO语句语法如下:

将字段中从+1位置开始且长度为<11>得内容赋给字段,覆盖从+1位 置开始且长度为<12>得段。

在WRITE TO语句中,目标字段得偏移量与长度指定可为变量。

四数值运算

要处理数值数据对象并将结果值赋给数据对象,可以用 (=)。COMPUTED句语法如下所示:

COMPUTE =

COMPUTE语句或赋值运算符

关键字COMPUTE可选。

4、1基本算术运算

ABAP/4支持四种基本算术运算,同时还支持乘方计算。可以用数学表达式指定以下算 术运算符:

+ -

加法 减法 乘法 除法 整除 求余 求幕 * / DIV MOD ** 可以用关键字 ADD SUBTRACT MULTIPLY与DIVIDE进行基本算术运算,而不使用数 学表达式中得运算符。

4、2字符串得算术运算

类似于用MOVE-CORRESPONDING句在字段串之间复制值,可以用以下关键字,执行字 段串得算术运算:

8 ADD-CORRESPONDING 8 SUBTRACT-CORRESPONDING 8 MULTIPLY-CORRESPONDING 8 DIVIDE-CORRESPONDING

对于所有同名字段串组件, ABAP/4进行相应算术运算。然而,仅当所有相关组件都就 是数值型数据类型时,该运算才有意义。 4、2、1添加字段顺序

除基本算术运算中所述得基本加法之外, 如,添加字段顺序并将结果赋给另一个字段:

ADD THEN UNTIL GIVING

ADD语句有几个变体,用于添加字段顺序。 例

如果、、、、 、就是在内存中相同类型与长度得等距字段序列,则进行 求与计算并将结果赋给

添加字段顺序并将结果添加到另一个字段内容中: ADD THEN UNTIL TO

该语句除了将字段总与添加到

4、3数学函数

以下内部函数使用所有三种数值数据类型( 函数 ABS SIGN 参数符号:1 -1 CEIL FLOOR TRUNC

F、I与P)作为参数。

结果 参数得绝对值 X > 0 X < 0 不小于参数得最小整数值 不大于参数得最大整数值 参数得整数部分 参数得分数部分 SIGN( X) = 0 if X = 0 FRAC 4、4浮点函数

以下内部函数用浮点数据类型( F)作为参数。 函数 ACOS ASIN、ATAN; COS SIN、TAN COSH SINH、TANH EXP LOG LOG10 SQRT 对于所有函数,正常数学约束适用。否则,会产生运行错误。 解释 三角函数 反三角函数 基数为e 得求幕函数(e=2、7182818285) 基数为e得自然对数 基数为10得对数 平方根 五字符串

5、1移动字符串

5、1、1按给定位置数移动字符串

要按给定位置数移动字段内容,使用

SHIFT语句,用法如下:

SHIFT <c> [BY <n> PLACES] [<mode>]、

该语句将字段<c>移动 <门>个位置。如果省略BY <n> PLACES则将<n>解释为一个位置。 如果<n>就是0或负值,贝U <c>保持不变。如果<n>超过<c>长度,则<c>用空格填充。<n>可 为变量。

对不同(<mode>选项,可以按以下方式移动字段

<c>:

LEFT:向左移动<n>位置,右边用<n>个空格填充(默认设置)

CIRCULAR向左移动<n>位置,以便左边 <n>个字符出现在右边。 5、1、2移动字符串到给定串位置

要移动字段内容以到给定串位置,则使用 SHIFT <c> UP TO <str><mode>、 ABAP/4查找<c>字段内容直到找到字符

<str>并将字段<c>移动到字段边缘。<mode> SHIFT语句,用法如下:

串 选项与按给定位置数移动字符串中所述相同。 <str>可为变量。

RIGHT:向右移动<n>位置,左边用<n>个空格填充。

如果<c>中找不到<str>,则将SY-SUBRC设置为4并且不移动<c>。否则,将SY-SUBRC 设置为0。

5、1、3根据第一个或最后一个字符移动字符串

假设第一个或最后一个字符符合一定条件, 为此,请使用以下语法:

则可用SHIFT语句将字段向左或向右移动。

SHIFT <c>LEFT DELETING LEADING <str> 、 SHIFT <c> RIGHT DELETING TRAILING <str> 、 假设左边得第一个字符或右边得最后一个字符出现在 向右移动。字段右边或左边用空格填充, <str> 可为变量。

<str>中,该语句将字段<c>向左或

5、2 替换字段内容

要用其它字符串替换字段串得某些部分,使用

REPLACE 语句。

REPLACE <str1> WITH <str2> INTO <c> [LENGTH <l>] 、

ABAP/4搜索字段<c>中模式<str1>前<1>个位置第一次出现得地方。如果未指定长度, 按全长度搜索模式<str1>。然后,语句将模式<str1>在字段<c>中第一次出现得位置用字符 串<str2>替换。

如果指定长度 <l> ,则只替换模式得相关部分。如果将系统字段 SY-SUBRC 得返回代码 设置为0,则说明在<c>中找到<str1>且已用<str2>替换。非0得返回代码值意味着未替换。 <str1> 、<str2> 与 <len> 可为变量。

5、3 大小写转换并替换字符串

可以将字母转换大/小写或使用替换规则。要转换大 /小写,使用TRANSLATE语句,用 法如下: TRANSLATE <c> TO UPPER CAS、E TRANSLATE <c> TO LOWER CAS、E

这些语句将字段<c>中得所有小写字母转换成大写或反之。 使用替换规则时,使用以下语法: TRANSLATE <c> USING <r>、

该语句根据字段<r>中存储得替换规则替换字段 <c>得所有字符。<r>包含成对字母,其 中每对得第一个字母用第二个字母替换。

<r>可为变量。

5、4 转换为可排序格式

可以将字符字段转换为可按字母顺序排列得格式:

CONVERT TEXT <c> INTO SORTABLE CODE <sc、>

该语句为字符字段<c>填充可排序目标字段<sc>。字段<c>必须就是类型C且字段<sc> 必须就是类型X,最小长度为<c>长度得16倍。

该语句目得就是为字符字段 <c>创建相关字段<sc>,作为<c>得按字母顺序排列得排序关 键字。在内表得内容与已解压缩得数据中进行排序。

如果对未转换得字符字段进行排序, 则系统创建与各字母得特定平台内部编码相对应得

顺序。在对目标字段进行排序之后,转换 CONVERTTEXT按这样得方式创建目标字段,相应

得字符字段顺序按字母排序。 例如,在德语中,顺序为‘ Miller 、Moller、Miler、Muller ' 而不就是'Miller 、Moller、Muller、Mller '。

转换方法依赖于运行 ABAP/4程序得文本环境。文本环境在用户主记录中定义。 就是可以使用如下语句,在程序中设置文本环境:

SET LOCALE LANGUAGE <lg> [COUNTRY <cy>] [MODIFIER <m>]、 该语句根据语言<lg>设置文本环境。对于选项COUNTRY只要特定国家语言不同, 以在语言以外指定国家。对于选项

MODIFIER,只要一个国家内语言不同,就可以指定另一

就可 例外得

个标识符,例如,排序顺序在电话簿与词典之间不同。

字段<lg>、<cy>与<m>必须就是类型 C且长度必须与表 TCP0C得关键字段长度相等。 表TCP0C就是一个表格,从中进行平台相关得文本环境维护。在语句 系统根据TCP0C中得条目设置文本环境。除了内部传送得平台特性之外,用

SET LOCALE期间,

SET语句指定

表关键字。如果<lg>等于SPACE,则系统根据用户主记录设置文本环境。如果对于指定得 关键字在表中无条目,则系统将产生运行错误。

文本环境影响ABAP/4中依赖于字符集得所有操作。

5、5覆盖字符字段

要用另一字符字段覆盖字符字段,使用

OVERLAY语句,用法如下:

OVERLAY <c1> WITH <c2> [ONLY <str>]、

该语句用<c2>得内容覆盖字段<c1>中包含<str>中字母得所有位置。<c2>保持不变。如 果省略ONLY <str>,则覆盖字段<c1>中所有包含空格得位置。

如果至少要替换<c1>中得一个字符,则将SY-SUBRC设置为0。对于所有其它情况, 将 SY-SUBRC设置为4。如果<c1>比<c2>长,则只覆盖<c2>中得长度。

5、6搜索字符串

要搜索特定模式得字符串,请使用

SEARC H语句,用法如下:

SEARCH <c> FOR <str><optio ns>、

该语句在字段<c>中搜索<str>中得字符串。如果成功,则将SY-SUBRC得返回代码值设 置为0并将SY-FDPOS设置为字段<c>中该字符串得偏移量。否则将 搜索串<str>可为下列格式之一: 目得 搜索<pattern> (任何字符顺序)。忽略尾部空格 SY-SUBRC设置为4。

、 * * 搜索<pattern>,但就是不忽略尾部空格 搜索以<pattern>结尾得词 搜索以<pattern>开始得词 单词之间用空格、逗号、句号、分号、冒号、问号、叹号、括号、斜杠、加号与等号等 分隔。

搜索字符字段<c>得各种选项(<options> )如下 ( 1) ABBREVIATED

在字段<c>中搜索包含<str>中指定字符串得单词, 其中字符可能被其它字符隔开。 单词 与字符串得第一个字母必须相同。

( 2) STARTING AT <n1>

在字段<c>中搜索从<n1>开始得<str>。结果SY-FDPOS参照相对于<n1>得偏移量而不就 是字段得开始。

(3)

ENDING AT <n2>

在字段<c>搜索<str>直到位置<n2>。 ( 4) AND MARK

如果找到搜索串,则将搜索串中得所有字符(与使用 换为大写形式。

ABBREVIATED时得所有字符)转

5、7 获得字符串长度

要决定字符串到最后一个字符而不就是 下:

[COMPUTE] <n> = STRLEN(<c> ) 、

STRLEN将操作数<c>作为字符数据类型处理,而不考虑其实际类型。不进行转换。关键 字COMPUTE可选。

SPACE得长度,使用内部函数STRLEN用法如

5、8 压缩字符串去空格

要删除字符字段中多余空格,使用 CONDENSE <c> [NO-GAPS、]

该语句去除字段<c>中得前导空格并用一个空格替换其它空格序列。结果就是左对齐单 词,每个单词用空格隔开。如果指定附加得

NO-GAPS则去除所有空格。 CONDENSE语句,用法如下:

5、9 连接字符串

要将单个字符串连接成一体,使用

CONCATENATED句,用法如下:

CONCATENATE <c1>、、、 <cn> INTO <c> [SEPARATED BY <s>] 、

该语句连接字符串<c1>与<cn>并将结果赋给<c>。

该操作忽略尾部空格。附加 SEPARATELY <s>允许指定字符字段<s>,它放置在单个字 段间已定义得长度中。

如果结果符合 ,则将SY-SUBRC设置为 0。然而,如果结果必须被截断,则将 SY-SUBR(设置为 4。

5、10拆分字符串

要将字符串拆分成两个或更多小串,使用 SPLIT AT INTO

SPLIT语句,用法如下:

、、、

该语句在字符字段搜索分界字符串,并将分界符之前与之后得部分放到目标字 段、、、 中。

要将所有部分放到不同目标字段中,必须指定足够目标字段。否则,用字段 部分填充最后目标字段并包含分界符。

如果所有目标字段足够长且不必截断任何部分,则将 设置为4。

SY-SUBRC设置为0。否则,将其

得剩余

5、11分配字符串部分

MOVE语句得以下变体只使用类型 C字段: MOVE TO PERCENTAGE

[RIGHT]、

将左对齐得字符字段得百分比

(或如果用RIGHT选项指定,则为右对齐)复制 到

值可为0与100之间得任何数。将要从 复制得长度取整为下一个整数。 如果语句中某一参数不就是类型

C,则忽略参数 PERCENTAGE

六逻辑流控制

6 1比较运算符

要比较所有得字段类型,可以在逻辑表达式中使用下列运算符: <运算符> 含义 EQ = NE <> >< LT < LE 等于 等于 不等于 不等于 不等于 小于 小于 小于等于 <= GT > GE >= 小于等于 大于 大于 大于等于 大于等于 「 操作数可以就是数据库字段、内部字段、文字或常数。

除基本字段外,还可以将结构数据类型与上表中得运算符结合起来作为操作数。 逐个组件进行比较,嵌套得结构分为基本得字段。

如果有意义,可以对不同数据类型得字段进行比较。 在比较之前,系统将按照下列层次规则执行自动类型转换:

(1) 如果操作数之一就是浮点数(类型 F),则系统将其它操作数转换为类型 (2) 如果操作数之一就是压缩字段(类型 P),则系统将其它操作数转换为类型

F。 P。

如果字段可转换,就可以进行比较。

字段串

(3) 如果操作数之一就是日期字段(类型 D)或时间字段(类型 T),则系统将其它操 作数转换为类型 D或T。不支持日期与时间字段之间得比较,这会导致程序中断。

(4)

如果操作数之一就是字符字段 (类型C)且其它操作数就是十六进制字段 (类型X), 则

系统将类型X得操作数转换为类型 C。

(5)

如果操作数之一就是字符字段(类型 C),其它操作数为数字字段(类型 N),则

P。

系统将这两种操作数都转换为类型

6 2比较字符串与数字串

要比较字符串(类型C)与数字文本(类型N),可以在逻辑表达式中使用下列运算符。

<运算符> CO CN CA NA CS NS CP NP 含义 仅包含 不仅包含 包含任何 不包含任何 包含字符串 不包含字符串 包含模式 不包含模式 所以,在进行包含这些运算

因为除类型N与C外,系统不能执行任何其它类型转换, 之一得比较时,操作数应该就是类型

运算符得功能如下: (1)

CO (仅包含)

N或C。

如果<f1>仅包含<f2>中得字符,则逻辑表达式 <f1> CO <f2>为真。该比较区分大小写, 并包括尾部空格。如果比较结果为真,则系统字段

SY-FDPOS包括<f1>得长度。如果为假,

则SY-FDPOS包含<f1>中第一个未在<f2>内出现得字符得偏移量。

(2)

CN (不仅包含)

如果<f1>还包含<f2>之外得其她字符,则逻辑表达式 <f1> CN<f2>为真。该比较区分大 小写,并包括尾部空格。如果比较结果为真, 则系统字段SY-FDPOS包含<f1>中第一个未同 时在<f2>中出现得字符得偏移量。如果为假, SY-FDPOS包含<f1>得长度。

(3) CA (包含任何 )

如果<f1>至少包含<f2>得一个字符,则逻辑表达式 <f1> CA<f2>为真。该比较区分大小 写。如果比较结果为真,则系统字段SY-FDPOS包含<f1>中第一个也在<f2>中出现得字符得 偏移量。如果为假,SY-FDPOS包含<f1>得长度。

(4) NA (不包含任何 )

如果<f1>不包含<f2>得任何字符,则逻辑表达式<f1> NA<f2>为真。该比较区分大小写。 如果比较结果为真, 则系统字段SY-FDPOS包含<f1>得长度。如果为假,则SY-FDPOS包含 <f1>中在<f2>内出现得第一个字符得偏移量。

(5) CS ( 包含字符串 )

如果<f1>包含字符串<f2>,则逻辑表达式<f1> CS<f2>为真。忽略尾部空格并且比较不 区分大小写。如果比较结果为真,

则系统字段SY-FDPOS包含<f2>在<f1>中得偏移量。如果

为假,SY-FDPOS包含<f1>得长度。

(6) NS ( 不包含字符串 )

如果<f1>不包含字符串<f2>,则逻辑表达式<f1> NS<f2>为真。忽略尾部空格且比较不 区分大小写。如果比较为真,系统字段

SY-FDPOS包含<f1>得长度。如果为假,系统字段

SY-FDPOS包含<f2>在<f1>中得偏移量。

(7) CP ( 包含模式 )

如果<f1>包含模式<f2>,则逻辑表达式<f1> CP<f2>为真。如果<f2>属于类型C,则可 以在 <f2> 中使用下列通配符:

15 * 用于任何字符串 15 + 用于任何单个字符

忽略尾部空格且比较不区分大小写。

如果比较结果为真, 系统字段SY-FDPOS包含<f2>

在<f1>中得偏移量。如果为假, SY-FDPOS包含<f1>得长度。

如果要对 <f2> 中得特殊字符进行比较, 请将换码符 # 放到其前面。 可以使用换码字符 # 指定: 15 大小写字符

15 通配符 \"*\"( 输入 #*) 15 通配符 \"+\" ( 输入 #+)

15 换码符号本身 ( 输入 ##) 15 字符串结尾得空格 ( 输入 #___) (8)

NP (不包含模式)

如果<f1>不包含模式<f2> ,则逻辑表达式<f1> NP<f2>为真。在<f2>中,可以使用与 CP 相同得通配符与换码字符。忽略尾部空格且比较不区分大小写。 如果比较结果为真,贝U系统 字段SY-FDPOS包含<f1>得长度,如果为假, SY-FDPOS包含<f2>在<f1>中得偏移量。

6 3比较二进制位结构

要将逻辑表达式初始操作数第一字节得二进制位结构与第二操作数得进行比较, F列操作符。

<运算符> O Z M 第二操作数得长度应为一个字节。 请使用

含义 二进制位就是1 二进制位就是0 混合二进制位 没有必要对第二操作数使用长度为 1得十六进制字段(类型X),但却较方便,因为其

长度为一个字节且数字值直接与二进制位结构相关。

操作符功能如下: O (二进制位就是1)

如果<hex>中二进制位就是1得位置,在<f>中就是1,则逻辑表达式<f> O <hex>为真。 Z (二进制位就是0)

如果<hex >中二进制位就是1得位置,在<f>中就是0,则逻辑表达式<f> Z <hex >为真。 M (混合二进制位)

如果从<hex>中二进制位就是1得位置起,<f>中至少一个就是1,一个就是0,则逻 辑表达式<f> M <hex>为真。

6 4编程分支与循环

6、4、1 IF条件分支

IF语句允许依据条件将程序流转到特定得语句块中。该语句块包括 得ELSEIF、ELSE或ENDIF之间得所有命令。 IF <con diti on1> 、

vstateme nt block> ELSEIF ELSEIF ELSE、

ENDIF、 如果第一个条件就是真,系统将执行所有语句直到第一个语句块结束,然后继续处理

IF语句及其后面

ENDIF 语句之后得程序。要采用选择性条件,可以使用 ELSEIF 语句。如果第一个条件就是 假,系统使用与 IF 语句一样得方式处理后面得 ELSEIF 语句。 如果 IF 或 ELSEIF 条件都 为假,则执行 ELSE 开始得语句块。最后得语句块必须用 ENDIF 结束。

要用公式表达 IF 与 ELSEIF 语句中得条件, 可以使用任何编程逻辑表达式描述得逻辑 表达式。 6、4、2CASE条件分支

要根据特殊数据字段得内容执行不同得语句块,可以如下使用 CASE 、 WHEN WHEN WHEN WHEN 、、、

CASE 语句:

、、、、、、 WHEN OTHERS、 ENDCAS、E

系统执行 WHEN语句之后得语句块,如果内容等于得内容,且继续处理ENDCASE 语句后面得语句。如果 得内容不等于得内容,则执行选项 WHENOTHERS后面得语句 块。最后得语句块必须用 ENDCASE结束。 6、4、3D0无条件循环

如果想要多次执行语句块,则可以如下使用 DO 语句编程循环: D0 [ TIMES] [VARYING FR0M NEXT ] ENDDO

在发现EXIT、STOP或REJECT语句之前,系统继续执行由 语句块。

DO弓I导、ENDDC结束得 、

可以使用TIMES选项循环次数。<n>可以就是文字或变量。如果<n>就是0或负数, 系统不执行该循环。

系统字段SY-INDEX中包含已处理过得循环次数。 6、4、4WHILE条件循环

如果只要条件为真,就不止一次执行语句,可以如下使用

WHILE语句编程:

WHILE <co nditio n> [VARY <f> FROM <f1> NEXT <f2>] 、

vstateme nt block>

ENDWHILE

只要<con diti on>就是真,或系统发现EXIT、STOP或REJECT语句,系统将继续执行 由 WHILE语句引导、

ENDWHILE结束得语句块。

对于<condition> ,可以使用编程逻辑表达式中描述得任何逻辑表达式。 系统字段SY-INDEX中包含已执行得循环次数。 可以任意嵌套 WHILE循环,也可与其她循环结合使用。

WHILE语句得VARY选项与DO循环得VARYING选项工作方式一样。允许每次执行循 环时为变量<f>重新赋值。<f1>、<f2>、<f3>、、、、必需就是内存中类型相同与长度相等 得一系列等距字段。第一次循环时,将

<f1>分配给<f>,第二次循环时,将 <f2>分配给<f>,

以此类推。可以在一个 WHILE语句中使用多个 VARY选项。

& 5终止循环

要终止循环过程,请使用下列关键字之一。

关键字 CONTINUE CHECK

用途 无条件终止循环过程 有条件终止循环过程 完全终止循环 CHECK与EXIT,分别完成

EXIT 在循环中只能使用 CONTINUE但在循环外还可使用关键字 不同得功能。 6、5、1无条件终止

要立即无条件终止循环,请如下使用 CONTINUE

CONTINUE语句:

在CONTINUE语句之后,系统跳过当前语句块中所有剩余语句块,继续该语句后面得循 环。

6、5、2 有条件终止

要有条件终止循环过程,请如下使用 CHECK 语句: CHECK

如果条件就是假, 系统跳过当前语句块中所有剩余语句块, 继续后面得循环过程。 对于 ,可使用编程逻辑表达式中描述得任何逻辑表达式。 6、5、 3 完全终止

要无条件完全终止循环,请如下使用 EXIT 语句: EXIT、

EXIT语句之后,系统立即退出循环,继续结束语句 后面得处理。在嵌套循环中,系统仅退出当前循环。

(ENDDO ENDWHILE ENDSELECT)

七内表

7、1 创建内表

TYPES: BEGIN OF OCCURS , ,

、、、、、、、、、、、、、、

END OF

DATA: TYPE STANDARD OF , TYPE

其作用与先创建字段串,然后再创建与该字段串行结构相同得内表 定行得初始号。将第一行写入用类型

相同。

创建得内表数据对象之后,就为指定行保留内存。

如果添加到内表中得行比 指定得要多,则自动扩展保留得内存。如果内存中没有足够空 间可用于内表,则将其写入缓冲区或磁盘(分页区域) 。

7、2 填充内表

要填充内表,既可逐行添加数据,也可复制另一个表格得内容。要逐行填充内表, 使用 APPEND、 COLLECT 或 INSERT 语句。

要将内表仅用于存储数据,出于性能方面得考虑,建议使用 以创建序列清单。 7、2、1 无关键字附加行

要将行附加到内表中,使用 APPEND 语句,用法如下: APPEND [ TO|INITIAL LINE TO]

APPEND用APPEND也可

可以

该语句将新行附加到内表 中。

通过使用 TO选项,指定要附加得源区域 。对于带表头行得表格, 可以忽略TO 选项。这样,表格工作区域就成了源区域。

可以使用INITIAL LINE TO选项替代 TO,将用其类型得正确值初始化得行添加到 表格中。 APPEND不考虑就是否存在标准关键字相同得行。这样,可能会出现相同条目。系统字 段SY-TABIX在每个APPEND语句之后包含附加行得索引。 7、2、2 根据标准关键字附加行

要用有唯一标准关键字得行填充内表,使用 COLLECT 语句,用法如下: COLLECT [ INTO]

该语句通过使用INTO选项指定想附加得源区域 。如果表格有表头行,则可以忽略 INTO 选项。这样,表格工作区域就成了源区域。

系统检查表格条目得标准关键字就是否相同。 语句相似,并将新行添至表格中。

如果存在关键字相同得条目, COLLECT语句不附加新行,但将工作区域中数字字段得 内容添加到现有条目中数字字段得内容中。 系统字段 SY-TABIX 包含处理过得行得索引。

为 COLLECT 指定得工作区域必须与内表得行类型兼容,不仅仅就是可转换为内表得行 类型。COLLECT语句无法用于带深层结构得内表,例如,将内表作为组件得行。

如果仅使用 COLLECT 语句填充内表,则不会出现重复条目。因此要填充没有重复条目 得内表,应该使用 COLLECT 而不就是 APPEND 或 INSERT。 7、2、3 插入行

如果没有,COLLECT语句得作用与 APPEND

要在内表行之前插入新行,使用 INSERT 语句,用法如下: INSERT [ INTO|INITIAL LINE INTO] [INDEX ]

该语句通过使用INTO选项指定想插入得源区域 。如果表格有表头行,则可以忽略 INTO 选项。这样,表格工作区域就成了源区域。

可以使用INITIAL LINE TO选项替代 TO,将用其类型得正确值初始化得行添至表 格中。 如果使用 INDEX 选项,则将新行插入到有索引 得行之前。 插入之后, 新条目索引 为,下行索引加1。

如果表格包含 - 1 条目,系统将新条目附加到最后得现有表格行之后。如果表格 得条目小于 - 1 ,系统无法插入条目并将 SY-SUBRC 设置为 4。如果操作成功,将 SY-SUBRC设置为 0。

如果使用不带 INDEX 选项得 INSERT 语句,系统只能在 LOOP - ENDLOOP 循环内通过 在当前行(例如带 SY-TABIX 返回索引得行)前插入新条目来处理它。 7、2、 4 附加内表行

要将部分或全部内表附加到另一个内表中,使用

APPEND语句,用法如下:

APPEND LINES OF [FROM ] [TO ] TO

如果没有 FROM 与 TO 选项, 该语句将整个表格 ITAB1 附加到 ITAB2 中。如果使用这 些选项,则可通过索引 指定ITAB1中要附加得第一或最后一行。

用该方式将表格行附加到另一个表格中得速度比在循环中逐行进行附加快 APPEND语句之后,系统字段 SY-TABIX包含附加得最后一行得索引。 7、2、5 插入内表行

要将部分或全部内表插入到另一个内表中,使用 INSERT 语句,用法如下: INSERT LINES OF [FROM ] [TO ]

INTO [INDEX ]

3到 4倍。在

如果没有 FROM 与 TO 选项, 该语句将整个表格 ITAB1 附加到 ITAB2 中。如果使用这 些选项,则可通过索引 指定ITAB1中要附加得第一或最后一行。

如果使用INDEX选项,将得行插入到中索引为得行之前。如果不 使用 INDEX 选项,系统只能在 LOOP - ENDLOOP 块中通过在当前行(例如,其索引在 SY-TABIX 中返回得行)之前插入新条目来处理它。 7、2、6 复制内表

如果想一次将内表得全部内容复制到另一内表中, 请使用 MOVE 语句或赋值操作符 (=) , 用法如下:

MOVE TO

该语句等价于: = 、也可进行多重赋值,例如, = = = 、也就是可能得。 ABAP/4 从右到左进行处理: = = = 、这些语句执行完整操作。复制整个表格内容,包括作为表 格组件得任何其它内表得数据。覆盖目标表格原来得内容。

对于有表头行得表格, 表格工作区域与表格本身同名。 要在上述语句中进行区分, 必须 在名称之后输入两个方括号 ([]) 来定位内表而不就是表格工作区域。

7、3 读取内表

7、3、1 逐行读取内表

要将内表逐行读入工作区域,可以使用 LOOP 语句编一个循环。语法如下所示:

LOOP AT [INTO ] [FROM ] [TO ]

[WHERE ] 、

、、、、、 ENDLOO、P

用INTO选项指定目标区域。如果表格有表头行,则可以忽略 表格工作区域就成了目标区域。

INTO选项。这样,

逐行将内表读入。对于读取得每一行,系统都处理以 LOOP开始,以ENDLOOP结束得语句块。 可以用控制关键字 AT在LOOP - ENDLOOP块内 控制语句块流。

在语句块内, 系统字段 SY-TABIX 包含当前行得索引。 处理完表格得所有行之后循环结 束。在ENDLOOP语句之后,如果至少读取了一行,则将系统字段 则,将其设置为 4。

可以使用FROM TO或WHERE选项要在循环中进行处理得行数。 22 使用FROM选项,可以用指定要读取得第一行。 22 使用TO选项,可以用指定要读取得最后一行。

22用WHERE选项,可以指定得任何逻辑表达式。第一个操作数必须就是 内表行结构得组件。如果在循环中使用控制关键字

AT,则不能使用WHERE选项。

SY-SUBRC设置为0。否

FROM与 TO选项系统必须读取得行数。 WHERE选项仅避免对工作区域进行不必要 得填充。用WHERE选项,系统必须读取所有行。为了提高效率,应该尽可能使用FROM与TO 选项。在某些条件下用

EXIT语句而不就是WHERE选项跳出循环也十分有效。

7、3、2 用索引读取单行

要用索引从内表中读取单行,使用 READ 语句,用法如下: READ TABLE [INTO ] INDEX

用INTO选项指定目标区域。如果表格有表头行,可以忽略 INTO选项。这样,表 格工作区域就成了目标区域。

系统用索引 从表格 中读取行。这比用关键字访问表格要快。 如果找到有指定索引得条目,则将系统字段 SY-SUBRC 设置为 0,而且 SY-TABIX 包含 该行得索引。否则,SY-SUBRC包含非0值。

如果 小于或等于 0 ,则会发生实时错误。如果 超过表格大小,系统将

SY-SUBRC中得返回代码值设置为 4。 7、3、 3 读取自定义关键字得单行 要从有自定义关键字得内表中读取单行, 使用 READ 语句得 WITH KEY 选项,用法如下: READ TABLE [INTO ] WITH

KEY [BINARY SEARCH] 、 用 INTO 选项可以指定目标区域。如果表格有表头行,则可以忽略 INTO 选项。这样, 表格工作区域就成了目标区域。

系统读取中匹配中所定义得关键字得第一个条目。 如果找到有适当关键字 得条目,则将系统字段 SY-SUBRC 设置为 0,并且 SY-TABIX 包含该行得索引。否则,将 SY-SUBRC设置为非0值。

如下所述,可以定义多个关键字 (1) 定义一系列关键字段

要定义自己得一系列关键字段,使用 WITH KEY 选项,用法如下: 、、、、 WITH KEY = 、、、 = 、、、

自定义关键字包含表格组件 、、、。字段、、、就是关键字段得内容必须 匹配得值。如果 得数据类型与数据类型 不兼容,则 转换为类型 。可以用 () 代替 来实时设置关键字段。关键字段就是字段 得内容。如果在运行时 为空,则系统忽略该关键字段。如果 包含无效得组件名称,则发生实时错误。

用户可以为任何在关键字中使用得组件指定偏移量与长度。 (2) 将整行定义为关键字

通过使用 WITH KEY 选项可将内表整行定义为其关键字,如下所示: 、、、、 WITH KEY = 、、、

如果得数据类型与表格行得数据类型不兼容, 则将转换为表格行得数据 类型。 对于此类关键字, 也可以选择由某个基本数据类型或内表直接定义得, 而不就是由字段 串直接定义得特定内表行。

(3) 将行首定义为关键字 要将内表得行首定义为关键字,使用 WITH KEY 选项,用法如下: 、、、、 WITH KEY 、、、

系统将(左对齐)得行首与进行比较。不能包含内表或包含内表得结构。与上面 两个选项不同之处在于用 得数据类型进行比较。

7、 3、 4 读取标准关键字得单行 要从内表中读取有特定标准关键字得第一行,使用 READ 语句,用法

如下:

READ TABLE [INTO ] [BINARY SEARCH] 、 用户必须指定要从 得表格工作区域中读取行得关键字。 读取语句得该变式只能用于有表头行得内表。 系统在表格中搜索第一个条目以匹配表格工作区域中得所有标准关键字段并将该行读 入表格工作区域。如果使用 INTO 选项,则将该行读入工作区域

标准关键字包含内表关键字中所述得全部关键字段,

其中不包含SPACE如果找到有匹

配关键字得条目, 则将系统字段 SY-SUBRC 设置为 0 并且 SY-TABIX 包含该行得索引。 否则, 将

SY-SUBRC 设置为 4。 7、3、 5 二分法搜索

用关键字读取单行时, 可以执行二分法搜索以代替标准顺序搜索。 为此, 使用 READ 语 句得二分法搜索选项。

READ TABLE 、、、、、BINARY SEARC、H 如果使用二分法搜索选项,则必须按关键字中指定得次序对内表进行排序。 如果系统找到匹配指定关键字得多行,则读取索引最低得行。 二分法搜索比线性搜索要快。 因此,应尽可能将内表排序并且使用二分法搜索选项。 7、3、6 比较单行得内容

要将使用 READ 语句读取得单行内容与目标区域得内容进行比较, 可使用 READ 语句得 COMPARIN选项,用法如下:

READ TABLE [INTO ] COMPARING

系统读取由关键字或 中得索引指定得单行。读取行之后,将 中指 定得组件与目标区域中得相应组件进行比较。

可以用INTO选项指定目标区域。如果表

格有表头,则可以忽略 INTO 选项。这样,表格工作区域就成了目标区域。

对于 ,可以编写一系列组件、、、 、、、。也可以用、、、ALL FIELDS 指定所有组件。

如果系统找到包含指定 得条目,且进行比较得字段内容相同,则将 SY-SUBRC设置为0。如果进行比较得字段内容不同,则返回值 则包含 4 。

如果系统找到条目,则无论比较结果如何,都将其读入目标区域。 7、 3、 7 读取一行部分列内容

要读取一行部分列得内容,使用

READ语句得TRANSPORTING选项,用法如下:

2。如果系统找不到条目,

READ TABLE [INTO ] TRANSPORTING

系统读取由关键字或 中索引指定得单行。读取行之后,将 中指定 得组件传输给目标区域。可以使用INTO选项指定目标区域。如果表格有表头行,可以 忽略 INTO 选项。这样,表格工作区域就成了目标区域。

对于 ,可以用、、、 、、、指定一系列组件。也可以用、、、NO FIELDS 指定不传输任何组件。

对于后一种情况,READ语句只影响系统字段 SY-SUBRC与SY-TABIX。

7、 3、 8 确定内表属性

如果在处理过程中想知道内表一共包含多少行, 使用 DESCRIBE 语句,用法如下:

DESCRIBE TABLE [LINES ] [OCCURS ] 、

或者想知道定义得OCCURS参数得大小,

如果使用LINES参数,则将填充行得数量写入变量 。如果使用OCCURS参数,则 将行得初始号写入变量

7、4 修改与删除内表行

7、4、1用MODIFY更改行

要用 MODIFY 语句更改行,使用:

MODIFY [FROM ] [INDEX ] 、

FROM选项中指定得工作区域 代替中得行。如果表格有表头行,可以忽略 FROM选项。这样,表格工作区域就代替行。

如果使用 INDEX 选项,则新行代替索引为 得现有行。如果替换成功,则将 SY-SUBRC设置为0。如果内表包含得行少于 ,则不更改任何行并且 SY-SUBRC包含4。

如果使用没有 INDEX 选项得 MODIFY 语句,则系统只能在 LOOP - ENDLOOP 块中通过 更改当前行(例如由 SY-TABIX 返回其索引得行)来处理它。 7、4、2用WRITE TO更改行

要用 WRITE TO 语句更改行,请使用下列语法:

WRITE [+][()] TO [+][()] INDEX

将字段中偏移量为,长度为<11>部分得内容复制到索引为 得表格行中,覆 盖偏移量为<02>,长度为<12>得部分。请注意, 即使对于有表头行得表格,带 INDEX选项 得 WRITE TO 语句也不访问表格工作区域,而就是访问表格得某一行。

WRITE TO 语句不能识别表格行得结构。 SAP 建议只在转换已知其确切位置得标志时才 使用该语句。 另一种情况就是用一个基本字符字段定义得内表。 该结构得表格非常重要, 例 如,用于程序得动态生成。

7、4、 3 在循环中删除行

要在循环中从内表中删除行,使用 DELETE 语句,用法如下: DELETE

系统只能在LOOP - ENDLOOP块中处理该语句。删除第一行后,可以取消当前行得定义 并取消其

对 SY-TABIX 内容得赋值。要在该循环内进一步处理行,需使用有 INDEX 选项得 语句。 7、4、 4 用索引删除行

要使用索引删除行,使用有 INDEX 选项得 DELETE 语句,用法如下: DELETE INDEX

如果使用 INDEX 选项, 则从 ITAB 中删除索引为 得行。 删除行之后, 下面行得索 引减 1。如果操作成功,则将 SY-SUBRC 设置为 0。否则,如果不存在索引为 得行,则 SY-SUBRC包含 4。

如果在LOOP- ENDLOOP块中删除某一条目,则当前行及其对

SY-TABIX内容得赋值可

成为未定义。要在该循环内进一步处理行,需使用有 INDEX 选项得语句。 7、4、 5 删除邻近得重复条目

要删除邻近重复条目,使用 DELETE 语句,用法如下:

DELETE ADJACENT DUPLICATE ENTRIES FROM [COMPARING 、] 系统从内表 中删除所有邻近重复条目。

如果没有COMPARING选项,则标准关键字段得内容必须相同。

如果有 COMPARING选项、、、、COMPARING 、、、,指定字段 、、、 得 内容必须相同。也可以通过写入

)代替在运行时在括号中指定字段名。字段

&含排序关键字段得名称。如果如果有 COMPARING选项、、、、COMPARING ALL FIELDS ,所有字段得内容必须相同。如 果系统找到并删除至少一个重复条目,则将 SY-SUBRC 设置为 0。否则,将其设置为 4。

如果表格根据指定得比较标准进行过排序, 则可使用该语句从内表中删除所有重复条目。 7、 4、 6 删除选定行

要删除一组选定行,使用 DELETE 语句,用法如下:

DELETE [FROM ] [TO ] [WHERE ]

用户必须至少指定三个选项之一。如果使用没有WHERE选项得该语句,则系统从 中删除所有索引在之间得行。如果不使用FROM选项,则系统从第一行开始删除。 如果不使用 TO 选项,则系统删除所有行直到最后一行。

如果使用 WHERE 选项,则系统仅从 中删除满足条件 得行。对于 ,可指定任何逻辑表达式。第一个操作数必须就是内表行结构得组件。

如果系统至少删除一行,则将 SY-SUBRC 设置为 0。否则,将其设置为 4。

7、5 内表排序

要将内表排序,使用 SORT 语句,用法如下: SORT [] [AS TEXT] [BY [] [AS TEXT]

、、、 [] [AS TEXT]]

如果不使用 BY 选项, 则根据其标准关键字对内表 进行排序。 要定义不同得排序 关键字,使用 BY 选项。系统就根据指定组件 、、、 对数据集进行排序。这些字段 可以就是任何类型, 包括类型 P 、I 与 F 字段,或者表格。 排序关键字段得数目在 250 以内。 如果指定多个关键字段, 则系统首先根据 ,然后根据 ,以此类推对记录进行 排序。系统使用 BY 之前指定得选项作为 BY 之后指定得所有字段得缺省选项。 在单个字段 之后指定得选项覆盖选项在 BY 之前指定得这些字段。

如果在运行时排序标准仍然未知, 可以通过写入 () 代替 进行动态设置 。 字段如果含无效得组件名, 则发生实时错误。 对于任何在排序字段中使用得字段, 用户都可指定偏移 量与长度。

用户可以通过在选项中输入 DESCENDING或ASCENDING来指定排序顺序。标准 顺序就是升序。

用户可以用选项 AS TEXT影响字符字段得排序方式。如果没有 排序字符字段并根据它们得平台相关内部编码。如果有选项 境按字母顺序排序字符字段。用户可用语句

AS TEXT,则系统二分

AS TEXT系统根据当前文本环

SET LOCALLANGUAG设置文本环境,这就是例

外。使用选项AS TEXT用户可免除在排序之前将字符字段转换为可排序格式之劳。此类转 换仅在下列情况下才有必要:

首先按字母顺序对内表进行排序, 然后二分法进行搜索。 按字母顺序排序后得内表次序 与按二分法排序后得次序不同。

用字母关键字多次对内表进行排序。 在这种情况下效率更佳, 因为只进行一次转换。 在 程序中为数据库表格创建字母索引。

如果在BY之前指定AS TEXT则选项仅影响排序关键字中得字符字段。如果在字段名 之后指定AS TEXT,则该字段必须为类型 C。

如果自己指定排序关键字,通过使关键字相对短些可提高效率。 字包含内表,则排序进程可能会慢很多。

排序并不稳定。这意味着也许没有必要保留排序关键字相同得行得旧次序。 如果主内存中没有足够得空间用于排序,

系统就将数据写入临时外部文件。该文件名在

但就是,如果排序关键

SAP参数文件参数 DIR_SORTTMP中定义。

7、6创建顺序表

内表适合于生成顺序表。为此,从空得内表开始,然后使用 选项,用法如下:

APPEND [<wa> TO] <itab> SORTED BY <f>

<itab>得最后

APPEND语句得SORTEDBY

如果使用有SORTED BY选项得APPEND语句,则并不将新行附加为内表 一行。而就是系统插入新行,这样内表

<itab>就根据字段<f>以降序排序。

要生成包含多达100个条目得顺序表,则应该使用APPEND语句。在处理更大得表时, 由于效率方面得原因,建议用

SORT语句对表格进行排序。

如果使用SORTED BY选项,表格只能包含 OCCURS参数中指定得行数。这就是一般规 则得一个例外。如果添加得行数比指定得要多, 序表十分有用。

使用APPEND语句得SORTED BY选项指定得工作区域必须与内表得行类型兼容。可转 换性对该选项不充分。

则丢弃最后一行。这对于创建长度有限得次

7、7 AT……ENDA冇组控制级别

用控制级别语句 AT可以打开语句块,用控制级别语句 所示:

AT <line> 、 vstateme nt block〉 ENDAT

在处理AT- ENDAT内语句块得行条件 <line>可以就是:

  • FIRST LAST NEW END Of 含义 内表得第仃 内表得最后仃 行组得开头,与字段<f>与<f>剩余字段中得内容相同 行组得结尾,与字段<f>与<f>剩余字段中得内容相同 ENDAT可以关闭它。语法如下

    AT - ENDAT块中得语句块使用这些行条件代表预定义得控制结构。用户可以使用它们 处理内表中得控制断点,而不必使用编程分支与循环中所述得语句自己编程。

    在AT - ENDAT语句块中,工作区域没有用当前表格行进行填充。初始化所有不就是标 准关键字部件得字段。对于行条件

    FIRST与LAST,系统用星号(*)改写所有标准关键字

    段。对于行条件 NEW与END OF ,系统用星号(*) 改写所有出现在工作区域中指定 字段右边得标准关键字段。用户可根据自己得需求在 域。

    使用AT NEW f与AT END OF f时需注意: ( 1) f 必须就是内表得第一个字段;

    (2)内表中 f 之后得字段得值都会变成“ *”。

    使用AT NEW, AT FIRST, AT LAST,AT END OF 时需注意:LOOP得时候不能加条件;

    AT

    AT - ENDAT语句块中填充工作区

    与ENDAT之间不能使用 LOOPINTO得working aera。手动实现 AT NEW,ATENDOF得时候, 需要注意,尤其就是在 AT END OF得时候。

    7、8 比较内表

    可以将内表用做逻辑表达式得操作数: 、、、、 、、、

    对于,可以使用比较所有得字段类型中得表格内列出得所有操作符 NE、 <>、 ><、 GE、 >=、 LE 、<=、 GT、 >、 LT 、 <)。

    进行内表比较得第一个条件就是它们包含得行数。

    内表包含得行数越多, 则内表就越大。

    (EQ =、

    如果两个内表行数相同,则逐行、逐个组件进行比较。如果表格行得组件本身就就是内表, 则进行递归比较。 如果使用等于操作符以外得操作符, 即停止比较并返回该结果。

    对于有表头行得内表, 则可在表格名之后使用方括号 [] 以将表格工作区域与表格体区别 开来。

    则系统找到一对不相等得组件后就立

    7、9 初始化内表

    要初始化有或没有表头得内表,使用 REFRESH

    REFRESH语句,用法如下:

    该语句将内表重置为填充它以前得状态。 这意味着表格将不包含任何行。 如果使用没有 表格工作区域得内表,可以使用

    CLEAR

    如果使用有表头行得内表,CLEAR语句仅清除表格工作区域。要重置整个内表而不清除 表格工作区域,使用 REFRESH语句或CLEAR语句,用法如下:

    CLEAR [] 、

    内表名称之后得方括号指内表体。

    CLEAR语句代替REFRESH语句,用法如下:

    使用REFRESH或CLEAR初始化内表后,系统保持在内存中保留得空间。可以用 语句释FREE 放内存,用法如下:

    FREE

    也可以使用FREE语句重置内表并直接释放其内存,

    而不必先使用 REFRESH或CLEAR

    与REFRESH 一样,FREE在表格体上,而不在表格工作区域上工作。

    在 FREE 语句之后, 可以再次定位内表。 这样,系统就再次保留内存空间。 可以使用如 下逻辑表达式检查内表就是否为空:

    、、、 IS INITIAL 、、、

    八模块化

    8、1 宏得定义与调用

    要定义包含部分源代码得宏,使用 DEFINE 语句,用法如下: DEFINE

    END-OF-DEFINITION、

    这就定义了宏。必须在 DEFINE与END-OF-DEFINITION之间指定完整得语句。 这些语句最多可以包含九个占位符(

    &1, &2,…,&9)。

    完成宏定义之后,就可以进行调用,方法如下: [ 、、、 ] 、 在生成程序期间,系统用已定义得语句替换 从宏中调用另一个宏,但宏不能调用自己。

    ,用替换每个占位符 &。可以

    8、2 使用包含程序

    要从另一个 ABAP/4 程序中调用包含程序,使用 INCLUDE 语句,用法如下: INCLUDE

    在语法检查期间与生成期间,该语句将源代码 插入到 ABAP/4 程序中。 INCLUDE 语句得功能类似于把 源代码复制到调用程序中语句得位置上。

    INCLUDE语句必须单独占一行,并且不能扩展到多行。

    包含程序不就是运行时装载得, 而就是在程序生成前就被解析。 程序生成后, 则包含所 用全部包含程序得源代码。

    8、3 调用子程序

    8、3、1 调用内部子程序

    要调用内部子程序,使用 PERFORM语句,用法如下: PERFORM [] 、

    调用子程序。在选项中,指定如何与子程序进行数据传递。如果不使用 选项,子程序也可以访问主 ABAP/4程序中声明得所有数据类型与对象。 全局数据,如果不被同名局域数据隐藏,该数据对子程序可见。 8、3、2 调用外部子程序

    要调用外部子程序,使用 PERFORM语句,用法如下: PERFORM () [] [IF FOUND] 、

    调用程序中定义得子程序。如果希望与子程序进行数据传递,必须定义 选项或者使用公用部分。如果使用

    ,系统就忽略 PERFORM语句。

    启动调用外部子程序得程序时,如果定义了子程序得程序不在内存中,

    ABAP/4 就将其

    IF FOUND选项,并且程序中没有子程序

    该数据叫做

    装载到内存中。为了节省存储空间,尽量将不同程序中定义得子程序数目到最小。 8、3、 3 运行时指定子程序名

    运行时,可以指定要调用得子程序名以及存储子程序得程序名。为此使用 句,用法如下:

    PERFORM () [IN PROGRAM ()] [] [IF FOUND] 、

    系统执行字段中存储得子程序。如果使用IN PROGRAMS项,系统在字段 中存储得程序内查找子程序 (外部调用)。否则,系统在当前程序中查找子程序 (内部调用) 。

    使用该语句还可在程序代码中指定子程序名与外部程序名。为此请忽略括弧。 选项指定如何与子程序进行数据传递。如果使用 系统就忽略PERFORM语句。 8、3、4 从列表中调用子程序

    要从列表中调用特定子程序,使用

    PERFORM语句,用法如下:

    PERFORM语

    IF FOUND选项,找不到子程序 时,

    PERFORM OF 、、、、

    系统执行子程序列表中位于 处得子程序。PERFORM语句得这一变量只对内部调用 有效。字

    既可以就是变量也可以就是文字。

    8、4 通过参数进行数据传递

    可以用参数在调用程序与子程序之间进行数据传递。 在定义子程序期间用 FORM 语句定义得参数叫做形式参数。 在调用子程序期间用 PERFORM语句指定得参数叫做实参数。

    可以区分不同种类得参数: 输入参数用于向子程序传递参数; 输出参数用于从子程序传 递参数;输入 / 输出参数用于与子程序进行参数传递

    在FORM与PERFORM语句得选项中定义参数,方法如下: FORM [TABLES ] [USING ] [CHANGING ]

    、、、、

    PERFORM [()] [TABLES ]

    [USING ]

    [CHANGING ]

    选项TABLES USING与CHANGING必须按上述顺序编写。

    列表中USING与CHANGING后面得参数可以就是所有类型得数据对象与字段符号。列

    表中 TABLES 后面得参数既可以就是有表头行得内表, 也可以就是不带表头行得内表。 可以 采用TABLES USING或CHANGING传送内表。

    对于FORM语句中USING与CHANGING后面列表中得每个形式参数,可以指定不同数 据传递方式:

    通过参考值调用: 在子程序调用期间, 仅将实参数得地址传送给形式参数。 形式参数本 身没有内存。 在子程序中使用调用程序得字段。 更改形式参数之后, 调用程序中得字段内容 也会变动。

    通过值调用: 在子程序调用期间, 形式参数就是作为实参数得副本创建得。 形式参数有 自己得内存。更改形式参数并不影响实参数。

    通过值与结果调用: 在子程序调用期间, 形式参数就是作为实参数得副本创建得。 形式 参数有自己得内存空间。在子程序末尾,将对形式参数得更改复制给实参数。 8、4、 1 通过参考传递

    要通过参考值在调用程序与子程序之间进行数据传递,使用 选项得USING或CHANGING用法如下: FORM、、、、、 [USING PERFOR、M、、 [USING

    、、、 ] [CHANGING 、、、 ] 、、、 、、、 ] [CHANGING 、、、 ] 、、、

    FORM与PERFORM语句 、、、、

    在USING与CHANGING后面得列表中指定形式参数与实参数,而不需附加任何内容。

    FORM语句中形式参数得名称可以与 PERFORM语句中实参数 、、 and

    FORM语句相应列

    、、得名称不同。PERFORMS句列表中得第一个参数传递给 表中得第一个参数,以此类推。

    对于通过参考值调用, USING与CHANGING完全相同。对于文档,USING用于子程序中 得固定输入参数,而 CHANGING则用于子程序中变化得输出参数。

    8、4、 2 通过值传递 要确保输入参数在调用程序中保持不变(即使子程序中已被更改) ,可以通过值将数据 传递给子程序。为此,使用 FORM与PERFORM语句选项得USING,用法如下:

    FORM、、、、、 USING 、、、VALUE() 、、 PERFOR、M、、 USING 、、、、、、、 、、

    通过对 FORM 语句中 USING 后面列表中得形式输入参数写入 VALUE() 而不就是 ,相应参数就通过值进行传递。 与实字段属性相同得PERFORM语句调用该子程序 时,就会创建一个新得局域字段 。系统处理于调用程序中参考字段得该字段。

    8、4、 3 通过值与结果进行传递 如果仅希望在子程序运行成功之后,才将更改过得输出参数从子程序返回给调用程序, 使用FORM与PERFORM语句选项得 CHANGING用法如下:

    FORM、、、、、 CHANGING、、、VALUE() 、、 PERFOR、M、、 CHANGING、、、、、、、 、、

    通过对FORM语句中CHANGING后面列表中得形式输入参数写入 是 ,相应参数通过值与结果调用进行传递。

    VALUE()而不就

    与实字段属性相同得PERFORM语句调

    用该子程序时, 就会创建一个新得局域字段 。系统处理于调用程序中参考字段得字 段。

    仅在运行到ENDFORM语句时,系统才将得当前值传递给。如果子程序因为 某个对话信息而中断,则实参数 保持不变。

    8、5 在子程序中定义局部数据类型与对象

    8、5、 1 定义动态局部数据类型与对象

    可以用 TYPES 与 DATA 语句,按照创建数据对象与数据类型中得说明,在子程序内创 建局部数据类型与数据对象。 为每个子程序调用新近定义得这些类型与对象将在退出子程序 时删除。

    每个子程序均有自己得局域命名空间。 如果用与全局数据类型或对象相同得名称定义局 部数据类型或对象, 则不能在子程序中访问全局数据类型或对象。 局部数据类型或数据对象 会隐藏同名全局数据类型或对象。这意味着,如果在子程序中使用某个数据类型或对象名, 则总就是定址局部声明得对象(如果存在) ,否则,定址全局声明得对象。 8、5、 2 定义静态局部数据类型与对象

    如果想在退出子程序后保留局部数据对象之值,必须使用 STATICS 语句而非 DATA 语 句进行声

    明。使用 STATICS 声明已全局定义,但仅在定义它得子程序中局部可见得数据对 象。

    8、5、 3 显示定义全局数据对象 要避免全局数据对象值在子程序内被更改,使用 LOCAL 语句,用法如

    下:

    LOCAL

    只能在FORM语句与ENDFORM语句之间使用该语句。 对于LOCAL ,可以保存无法被子 程序内得数据声明隐藏得全局数据对象值。

    8、6 调用功能模块

    要从 ABAP/4 程序调用功能模块,使用 CALL 语句,用法如下: CALL FUNCTION [EXPORTING f1 = a1 [IMPORTING f1 = a1

    =

    [CHANGING f1 = a1 [TABLES f1 = a1 [EXCEPTIONS e1 = r1

    可以将功能模块

    = =

    、、、、 en = rn [OTHERS = ro]]

    得名称指定为文字或变量。通过将实参数显式指定给

    an] 、、、、 fn an] 、、、、 fn an] 、、、、 fn = an] 、、、、 fn

    EXPORTING IMPORTING TABLES或CHANGING选项后面列表中得形式参数,与功能模块 之间进行参数传递。

    分配总就是有以下格式: =

    (1) EXPORTINGS项允许将实参数 ai传递给形式输入参数 fi 。在功能模块中,必须 将形式参数声明为输入参数。

    (2)

    IMPORTING选项允许将形式输出参数 fi 传递给实

    参数ai。在功能模块中,必须 将形式参数声明为输出参数。

    (3) CHANGING选项允许将实参数 ai传递给形式参数fi,并在处理功能模块后,系 统将(更改过得)形式参数 fi 传递回实参数 ai 。在功能模块中,必须将形式参数声明为 更改参数。

    ( 4) TABLES 选项允许在实参数与形式参数间传递表格。 借助该选项, 内表总就是通过 参考值传递。

    EXPORTING IMPORTING与CHANGING选项得参数可以就是任意类型得数据对象。 选项得功能类似于子程序得

    这些

    FORM与PERFORM语句中得USING与CHANGING选项。TABLES

    选项得参数必须为内表。 TABLES选项对应于FORM与PERFORM语句得TABLES选项。

    用EXCEPTIONS选项,可以处理功能模块处理过程中发生得例外。 特殊参数。有关如何定义与出现例外得内容,

    例外就是功能模块得

    如果出现

    创建与编程功能模块中有专门说明。

    ei例外,则系统停止执行功能模块,并且不将任何值从功能模块传递给程序,通过参考值 传递得值例外。

    如果在 EXCEPTION选项中指定了 ei ,则调用程序通过将 ri分配给

    SY-SUBRC来处理例外。必须将ri 指定为数字文字。可以使用EXCEPTION列表中得OTHERS 处理列表中没有显式指定得所有例外,并且可将同一数值

    ri用于多个例外。

    九数据库

    9、1开放式SQL

    关键字 SELECT INSERT UPDATE MODIFY DELETE OPEN CURSOR, FETCH, CLOSE CURSOR COMMIT WORK,

    用途 从数据库表读取数据 将行添加到数据库表 更改数据库表中得行 添加或删除行 从数据库表删除行 用光标从数据库表中读取行 确认或撤消对数据库表得更改 ROLLBACK WORK 在ABAP/4程序中使用开放式 SQL语句时,必须保证: (2)被定址得数据库系统必须就是 SAP支持得; (2)必须已经在ABAP/4词典中定义了被定址得数据库表 下列系统字段在开放式 SQL操作中起着重要得作用: (1)

    SY-SUBRC

    与使用其它ABAP/4语句一样,系统字段SY-SUBRC中得返回代码值表示在每个开放式 SQL操作之后该操作就是否成功。 如果操作成功,SY-SUBRC得值就等于0 ;如果操作失败, SY-SUBRC得值就不等于 0。

    (2)

    SY-DBCNT

    SY-DBCNT字段中得值表明受该操作影响得行数,或已被处理得行数。

    9、2读取数据

    要从数据库表读取数据,使用

    SELECT语句:

    SELECT FROM [INTO ] [WHERE ]

    [GROUP BY ] [ORDER BY ] 该语句有几个基本子句。下表中列出了每一个子句:

    子句 SELECT FROM 说明 定义选择得结果 指定将读取得数据库表 、

    INTO WHERE GROUP BY ORDER BY 9、2、1定义选择结果 SELECT

    选定数据指定目标区 选择即将读取得行 行分组 指定行得顺序 SELECT子句定义就是选择单行还就是选择多行、 就是否去掉重复行以及将选择哪些列。 (1)

    选择多行中得所有数据

    SELECT语句。

    要从数据库表中读取所有列与多行,按如下方式在循环中使用

    SELECT [DISTINCT] * 、、、、、、、、、、、、ENDSELECT

    必须用ENDSELECT语句结束该循环。该循环依次读取所选行,并为每个读取得行执行 循环中得ABAP/4语句。SELECT循环得结果就是与被读取得数据库表得格式完全相同得表。

    DISTINCT选项将自动得去掉重复得行。如果至少读取了一行,系统字段

    SY-SUBRC就

    返回0。如果没有读取,系统字段SY-SUBRC就返回4。系统字段SY-DBCNT给读取得行计 数。每执行一次 SELECT语句,SY-DBCNT都力口 1。

    (2)

    选择单行中得所有数据

    SELECT语句:

    要从数据库表中读取单个行得所有列,按如下方式使用

    SELECT SINGLE [FOR UPDATE] *、、、、、、、WHERE 、、、、、、

    该语句得结果就是一个单行。为了保证清楚地指定了一行,就必须在 件中用AND链接形成数据库表主码得所有字段。

    如果系统没有找到具有指定关键字得行, 到了一个完全符合指定条件得行,

    系统字段SY-SUBRC将设置为4。如果系统找

    WHERE子句得条

    SY-SUBRC就返回0。

    可以使用FOR UPDATE选项锁定在数据库表中选定得行。 程序将一直等到接收到该锁定。 如果数据库检测到或怀疑有一个死锁定,将产生运行时间错误。

    (3)

    选择指定列中得所有数据

    按如下方

    要读取显式地包含规定得列得行, 或要得到关于数据库表特定列得摘要信息, 法使用SELECT语句:

    SELECT [SINGLE [FOR UPDATE]] [DISTINCT]

    9、2、2指定数据表 FROM

    (1)在程序中指定数据库表

    要在程序中指定即将读取得数据库表或视图,按下列格式使用

    FROM子句: 、、、、、

    、、、、、、 FROM [CLIENT SPECIFIED] [BYPASSING BUFFER] [UP TO

    ROWS] 、、、、、、、、、

    数据库表或视图 必须对 ABAP/4 词典有效,并且必须在 ABAP/4 程序中包含相 应得 TRABLES 语句。

    CLIENT SPECIFIED选项用于关闭自动集团处理, 取 SAP 表缓冲区就可直接读取数据库。

    ( 2)在运行时指定数据库表 可以在运行时指定数据库表得名称。为此,按如下格式使用 FROM 子句:

    、、、、、、 FROM () [CLIENT SPECIFIED] [BYPASSING BUFFER]

    [UP TO ROWS]

    、、 INTO 、、、、、

    BYPASSING BUFFER选项使得不用读

    该格式得 FROM 子句只能与 INTO 子句一起使用。

    字段 ROWS 同样就是用于在程 序中指定数据库表得名称。

    9、 2、 3 指定目标区 INTO

    (1) 将数据读到工作区

    可以将数据从数据库表读到与 TABLES 语句中定义得默认工作区不同得工作区 (通常就 是字段串)中。为此,按照如下格式在 SELECT 语句得 INTO 子句中指定工作区:

    SELECT、、、 INTO 、、、、、、、、、、、、

    必须为工作区声明一个至少与将读取得行一样大得数据对象。

    (2) 将数据读到内表 可以在单个操作中将数据库表中行选择得结果集写入内表中。为此,按照如下格式在

    SELECT语句得INTO子句中指定内表:

    SELECT、、、、、 INTO TABLE

    在该情况下,SELECT并不启动循环,并且不允许使用 ENDSELECT语句。如果内表 不就是空得,那么,SELECT语句将用读取得数据覆盖其中得内容。

    (3) 将数据读到预定义包大小得内表 如果需要将所选行按已预定义大小得包得形式读到内表中, 按如下格式使用 INTO 子句 得 PACKAGE SIZE 选项:

    SELECT * 、、、、、 INTO TABLE PACKAGE SIZE 、、、、、

    该语句打开一个循环,必须使用ENDSELECT语句结束该循环。对于读取得每个包含

    行得包,系统都将执行一次循环。如果 小于或等于零,将出现运行时间错误。

    (4) 将数据行附加到内表中 为了避免覆盖内表中得内容,可将所选行附加到此表中。为此,按如下格式使用

    APPENDING?句,而不就是 INTO 子句:

    SELECT、、、、、 APPENDING TABLE 、、、、、

    与上面描述得 INTO 子句得唯一区别就是它就是将行附加到内表 中,而不就是替 换。也可以在该语句中使用 PACKAGE SIZE 选项。

    (5) 逐个组件得读取数据

    要一个组件接一个组件地将数据读到目标区中,请使用 FIELDS 选项。语法如下所示:

    INTO 子句得 CORRESPONDING

    对于将数据读到工作区中:

    SELECT、、、 INTO CORRESPONDING FIELDS OF 、、、、、、、、 对于将数据

    读到内表中:

    SELECT、、、 INTO CORRESPONDING FIELDS OF TABLE 、、、、、、、、 对

    于将数据附加到内表中:

    SELECT、、、 APPENDING CORRESPONDING FIELDS OF TABLE 、、、、、、、、

    这些语句不会将所选行得所有字段放进目标区中。 系统只将列得内容传送到目标区得对 应组件中。如果可能,在传送过程中,可将值转换成目标字段得数据类型。 9、2、 4 选择读取行 WHERE

    (1)在程序中为行选择指定条件

    要在程序中为行选择指定条件,按如下格式使用 、、、、、 WHERE 、、、、、、、、 有六个基本条件可用于行选择。描述如下: 1)

    WHERE子句:

    就是不带作为前缀得表名称得数据库字段名(数据库表得列) 字母。字段名称与操作符必须用空格隔开。

    2) NOTBETWEEN AND

    就是任意字段或

    数据库字段得值必须(不能)处于字段或字母 得值之间才符合该条件。

    3) NOTLIKE [ESCAPE ] 该条件只能用于字符类型字段。要符合该条件,数据库字段 中得值必须(不能)符

    得模式。在指定时,可使用下列两个通配符:

    _ (下划线)表示单个字符 % (百分号)表示任意字符串,包括空字符串 4) NOTIN (,

    、、、、、、,

    要满足该条件,数据库字段 中得值必须(不能)等于括号内列表中得一个值。 在该变式中,在括号与比较字段 5) IS [NOT] NULL

    数据库字段中得值必须(不能)等于 NULL值。 6) NOTIN

    要满足该条件,数据库字段 得值必须(不能)符合选择表 中指定得条件。 选择表就是一个特殊得内表,报表用户可在选择屏幕上填充它。通常就是使用 SELECT-OPTIONS或 RANGES来创建选择表,但就是也可以按照创建与处理内表中得说明定 义。

    (2)使用逻辑链接操作符组合条件

    可以使用逻辑链接操作符 AND、OR与NOT按照任意顺序来组合六个基本 如果希望指定几个必须同时满足得条件,可按照下列方法用

    WHERE条件。

    之间不能有空格,但在比较字段之间可以有空格。

    AND组合它们:

    、、、

    、、、、WHERE AND AND AND

    如果需要指定几个条件, 至少要满足其中得一个条件, 就可按照下列方法用 OR组合它 们:

    、、、、WHERE OR OR OR 、、、 如果只希望选择那些不符合指定条件得表条目,就可用 、、、、WHERE NOT

    NOT得优先级比AND高,AND得优先级比OR高。但就是,可使用括号来定义处理得 顺序。这些括号都必须加空格。 9、2、5指定行选择条件

    (1)指定条件得列表

    要在运行时指定一系列条件来选择一定数目得特定行,可在 WHERE子句得特殊变式:

    SELECT、、、、、FOR ALL ENTRIES IN WHERE 、、、、、

    SELECT语句中使用下列 NOT转化条件,如下所示:

    在条件中,可按前面得叙述将内部字段或字母指定为比较值。也可以将内 表得列或字母用作比较值。在

    WHERE条件中,这些列将用作占位符。

    该SELECT语句得结果集就是 SELECT语句得所有结果集得联合,这些结果集就是用 中得相应值在每一行上替换占位符得结果,将从结果集中删除重复行。

    如果使用了 WHERE子句得该变式,就不要使用

    ORDER BY子句。

    (2)给行分组 要将数据库表得一组行中得内容组合到单个行中,可按如下格式使用 SELECT 语句得 GROUP BY子句:

    SELECT [DISTINCT] 、、

    FROM clause INTO clause GROUP BY SELECT [DISTINCT] 、、、

    FROM clause INTO clause GROUP BY (

    该组由 、、、、、 指定得列中包含有相同值得行组成。 ( 3)指定行得顺序

    在读取行得集合时,可使用 SELECT 语句得 ORDERBY 子句指定这些行得顺序,按该顺 序将这些行传送给 ABAP/4 程序。

    如果不使用 ORDER BY 子句,将不定义选择得行得顺序。

    1) 可根据主码或明确指定得字段给这些行排序,可使用下列形式得 SELECT * 、、、、、 ORDER BY PRIMARY KE、Y

    如果使用ORDER BY PRIMARY KEY选项,系统将按主码以升序给所选行排序。 2) 按指定得字段排序,可使用下列语法:

    、、 ORDER BY [ASCENDING|DESCENDING] [ASCENDING|DESCENDING]、、、 按指定得表字段 , ,

    、、、、 给所选行排序。可以在每个字段名后指定选项

    ORDER BY 子句:

    、、、、

    ASCENDING或DESCENDING为每个表字段明确地指定排序顺序。

    标准得排序顺序就是升序。 如果指定了多个字段, 那么系统首先按 给所选行排序, 然后就是 ,依此类推。

    9、3 添加数据

    9、3、 1 添加单一行

    要在数据库表中添加一单行,可使用下列 INSERT 语句得任一变式。 INSERT 语句得基 本格式如下所示:

    INSERT INTO [CLIENT SPECIFIED] VALUES

    工作区^得内容将写进数据库表 中。必须在程序中使用 TABLES语句声明 该数据库表。工作区^长度至少要等于数据库表得表工作区长度。

    为了保证工作区具有

    与数据库表相同得结构,可通过 DATA 或 TYPES 语句用 LIKE 选项来定义它。 9、3、 2 添加多行

    要使用 INSERT 语句将几行从内表中添加到数据库表中,使用下列语法: INSERT [CLIENT SPECIFIED] FROM TABLE [ACCEPTING DUPLICATE KEYS、]

    如果需要在运行时间指定数据库表名,使用下列语法:

    INSERT () [CLIENT SPECIFIED] FROM TABLE [ACCEPTING DUPLICATE KEYS、]

    此语句在单个操作中将内表 中得所有行添加到数据库表中。

    9、4 更新数据

    9、4、 1 更新单一行

    要使用UPDATE语句更改单行,可使用 了完整得 WHERE条件得UPDATE语句。

    UPDATE语句得短格式如下所示:

    UPDATE [CLIENT SPECIFIED] FROM 、 与

    UPDATE [CLIENT SPECIFIED] 、

    在第一个语句中,工作区中得内容将覆盖数据库表 得行,该数据库表与 具有相同得主码。必须在程序中用 TABLES 声明该数据库表。

    在第二个语句中,没有指定工作区 主码得数据库表得行。 9、4、 2 更新多行

    要使用 UPDATE 语句在数据库表中更改多行,使用下列语法: UPDATE [CLIENT SPECIFIED] SET

    、、 [WHERE ] 、

    。但表工作区中得内容将覆盖具有相同

    UPDATE语句得短格式,带有 SET子句并指定

    使用WHERE子句选定要更改得行。如果不指定WHERE子句,将更改所有得行。必须在 程序中用 TABLES 语句声明该数据库表。 CLIENT SPECIFIED 选项用于关闭自动集团处理。 9、4、3 使用内表更新多行

    要通过 UPDATE 语句使用内表在数据库表中更改多行,使用下列语法: UPDATE [CLIENT SPECIFIED] FROM TABLE 、 如果需要在运行时间指定数据库表得名称,就要使用下列语法: UPDATE () [CLIENT SPECIFIED] FROM TABLE

    内表中得行将覆盖数据库表中具有相同主码得行。 内表中行得长度至少要等于数据库表中行得长度。 为了保证内表得结构与数据库表得结 构相同,就必须通过 DATA 或 TYPES 语句使用 LIKE 选项来定义。

    如果因为不存在带有指定关键字得行而使系统不能更改行, 作,而就是继续处理内表中得下一行。

    那么, 系统不会终止整个操

    9、5 添加或更改数据 要在数据库表中插入一行,而不考虑该行得主码就是否已经存在,使用 MODIFY

    语句。 有两种可能:

    如果数据库表中没有哪一行得主码与即将插入行得主码相同,那么, 与 INSERT 得操作相同,即添加该行。

    如果数据库中已经包含主码与即将插入行得主码相同得行, UPDATE得操作相同,即更改该行。 9、5、 1 插入单行

    要插入单行,使用下列语法:

    MODIFY [CLIENT SPECIFIED] [FROM ] 如果需要在运行时间指定数据库表得名称,使用下列语法:

    MODIFY () [CLIENT SPECIFIED] [FROM ] 9、5、 2 插入多行

    要插入多行,使用下列语法:

    MODIFY [CLIENT SPECIFIED] FROM TABLE 如果需要在运行时间指定数据库表得名称,使用下列语法:

    MODIFY () [CLIENT SPECIFIED] FROM TABLE

    那么, MODIFY 得操作就与

    MODIFY得操作就

    9、6 删除数据

    9、6、 1 删除单行

    要使用DELETE语句删除单行,可以将 DELETE语句与完整得 WHERE条件一起使用。 使用 DELETE 语句得短格式。

    DELETE [CLIENT SPECIFIED] FROM

    DELETE [CLIENT SPECIFIED] 、 在第一个语句中,将从数据库表

    中删除主码与须在程序中用 TABLES 语句声明该数据库表。

    在第二个语句中,没有指定工作区 中指定得主码相同得行。 9、6、 2 删除多行

    要在单个操作中从数据库表 中删除多行,可使用如下格式得

    DELETE语句:

    。而就是从数据库表中删除主码与表工作区

    DELETE FROM [CLIENT SPECIFIED] WHERE 、 如果需要在运行时间指定数据库表得名称,使用下列语法:

    DELETE FROM () [CLIENT SPECIFIED] WHERE 、 9、6、3 使用内表删除多行

    要通过 DELETE 语句用内表从数据库表中删除多行,使用下列语法:

    DELETE [CLIENT SPECIFIED] FROM TABLE 、 如果需要在运行时间指定数据库表得名称,使用下列语法:

    DELETE () [CLIENT SPECIFIED] FROM TABLE

    这些语句从数据库表中删除主码与内表 中得某行相同得行。 内表得长度至少与数 据库表得主码得长度相同。

    如果因为数据库表中没有哪一行得主码与指定得相同, 从而系统没有删除任何行, 那么, 系统不会终止整个操作,而就是继续处理内表得下一行。

    如果已经处理了内表中所有得行, SY-SUBRC 将设置为 0。否则, 设置为 4 。在稍后得 时候,从内表得总行数中减去 SY-DBCNT 中给出得实际已删除得行数, 就可计算系统尚未删 除得行数。如果内表就是空得,那么 SY-SUBRC 与 SY-DBCNT 都将设置为 0 。

    9、7 使用光标读取数据

    9、7、 1 打开光标 使用光标几乎可从任何 SELECT 语句得结果集中获得下一行(或一些行) 。为此,按如 下格式使用 OPEN CURSOR语句将光标与相关得 SELECT语句链接起来:

    OPEN CURSOR [WITH HOLD] FOR SELECT、、、、、、、、 [WHERE ] 、

    首先必须将光标定义为类型 CURSOR如果使用 WITH HOLD选项,那么在自身得 SQL 数据库提交之后,该光标将保留打开状态。

    9、7、2 用光标读取数据

    在打开光标后,就可使用FETCH语句从OPENCURSOR语句生成得结果集中读取下一行, 如下所示:

    FETCH NEXT CURSOR INTO 、 所选行都将读到 INTO 子句指定得目标区中。 9、7、 3 关闭光标

    必须使用CLOSE CURSOR语句关闭不再需要得光标,如下所示: CLOSE CURSOR 下列情况将自动关闭光标:

    1) 执行 COMMIT WOR感 ROLLBACK WOR语句时; 2) 当执行自身得 SQL 数据库提交或取消时; 3) 更改屏幕时;

    4) 执行远程功能调用时。

    如果在 OPEN CURSOR语句中使用 WITH HOLD选项,自身得 SQL中得数据库提交将不 会关闭光标。

    9、8 数据簇

    9、8、1 向内存中存储数据对象

    要将数据对象从 ABAP/4 程序写入 ABAP/4 内存,使用下列语句: EXPORT [FROM ] [FROM ]

    、、、 TO MEMORY ID

    此语句将列表中指定得数据对象存储为 ABAP/4 内存中得数据簇。 如果忽略选项 FROM ,则将数据对象 存储到自己得名称之下。 如果使用该选项, 则将数据对象 存储 到下面。ID 用于标识内存数据,不得超过

    32个字符。

    EXPORT语句总就是完全改写ID 相同得任何现有数据簇得内容。对于有表头行得 内表,只可以存储表本身,而不能存储表头行。 9、8、2 从内存中读取数据对象

    要将 ABAP/4 内存中得数据对象读到 ABAP/4 程序中,使用下列语句: IMPORT [TO ] [TO ]

    、、、 FROM MEMORY ID

    此语句从 ABAP/4 内存得数据簇读取列表中指定得数据对象。如果忽略选项 TO , 则将内存中得数据对象 赋给程序中得同名数据对象。 如果使用此选项, 则将内存中得数 据对象 写入字段 中。 ID 用于标识内存数据,不得超过 32 个字符。

    此语句不进行这种检查: 即内存中得对象结构与要写入得结构就是否匹配 。因为数据 就是按位进行传送得,所以不匹配得结构可能会引起不一致。 9、8、3 删除内存中得数据簇

    要删除 ABAP/4 内存中得数据对象,使用下列语句: FREE MEMORY [ID ]、

    如果不附加ID ,则此语句删除整个内存, 包括此前用EXPORT存储到ABAP/4内 存中得所有数据簇。附加 ID 之后,该语句只删除用此名称命名得数据簇。

    因为删除整个内存会导致任何系统例程内存内容得丢失,所以应只使用附加有 FREE MEMOR 语句。

    ID 得

    十文件

    10、1 打开文件

    要在应用服务器上打开文件,使用如下 OPEN DATASET [options] 、

    OPEN DATASET语句:

    此语句打开文件。如果不指定任何模式选项,则文件将按二进制模式打开。如果 系统不能打开文件,则将系统字段 SY-SUBRC 设置为 0 ,否则 SY-SUBRC 返回 8。

    可以将文件名指定为字母或包含文件名得字段。如果未指定路径,则系统将在应 用服务器上 SAP 系统运行得目录中打开文件。 要打开文件, 运行 SAP 系统得用户必须在操 作系统级有相应得权限。 10、 1、1 接受操作系统消息

    尝试打开文件后,要接受操作系统消息,使用如下 项:

    OPEN DATASET MESSAGE 系统将在变量^放置相关得操作系统消息。 10、 1、2 打开文件读取

    要打开文件进行读访问,使用如下

    OPEN DATASET语句得FOR INPUT选项:

    OPEN DATASET语句得MESSAGE选

    OPEN DATASET FOR INPUT、 此语句打开文件用于读取。文件必须已经存在,否则系统将

    SY-SUBRC 设置为 8 并且

    忽略此命令。如果文件已打开(可能用于读、写或追加) ,系统将复位到文件得起始位置。 但就是在重新打开文件之前使用 CLOSE 语句就是良好得编程风格。 10、 1、3 打开文件写入

    要打开文件进行写访问,使用如下 OPEN DATASET语句得FOR OUTPUT选项:

    OPEN DATASET FOR OUTPU、T

    此语句打开文件用于写入。 如果文件不存在, 则创建文件。 如果文件已存在但处于关闭 状态,则删除其内容。如果文件已存在且已打开(可能为读、写或追加)

    ,则复位到文件得

    起始位置。如果系统可以打开文件,则 SY-SUBRC 设置为 0,否则 SY-SUBRC 返回 8 。 10、 1、4 打开文件追加

    要打开文件追加数据,使用 OPEN DATASET语句得FOR APPENDING选项: OPEN DATASET FOR APPENDIN、G

    此语句打开文件在文件末尾写入数据。 如果文件不存在, 则创建文件。 如果文件已存在 但处于关闭状态, 系统将打开文件并定位到文件末尾。 如果文件已存在且已打开 (可能为读、 写或追加),将定位设置到文件末尾。 10、 1、5 指定二进制模式

    SY-SUBRC总就是返回0。

    要用二进制模式处理文件,使用 OPEN DATASET语句中得IN BINARY MODE选项:

    OPEN DATASET IN BINARY MODE [FOR 、、、、] 、 如果从以二进制模式打开得文件中读取数据或向此类文件中写入数据,

    系统将逐字节地

    系统将传

    传输数据。 在传输期间, 系统不解释文件内容。在将文件内容写入到另一文件时,

    输源文件得所有字节。在从文件读取数据到字段时,传输得字节数目取决于目标字段大小。 在读取之时或之后, 可以用其它 ABAP/4 语句给目标字段定址, 系统将根据数据类型解释字 段内容。 10、 1、 6 指定文本模式

    要用文本模式处理文件,使用 OPEN DATASET语句得TEXT MODE选项:

    OPEN DATASET FO R、、、、 I N TEXT MODE、 如果从以文本模式打开得文件中读取数据或向此类文件中写入数据,数据将逐行传输。 系统假定文件为行结构。 10、 1、7 在指定位置打开文件

    要在指定位置打开文件,使用 OPEN DATASET语句得AT POSITION选项:

    OPEN DATASET [FOR 、、、、] [IN 、、、 MODE] AT POSITION

    此语句打开文件并为读写数据定位位置,该位置从文件起始处起按字节计算。 在文件起始处以前,不能指定位置。以二进制模式工作时,指定位置 文本文件得物理表示法取决于操作系统。

    相当有用,因为

    10、2 关闭文件

    要在应用服务器上关闭文件,使用 CLOSE DATASET语句: CLOSE DATASET

    此语句关闭文件,文件命名在打开文件中有说明。 只有在下次为写入打开文件期间要删除文件内容时, 关闭文件才有必要。 为避免错误并 使程序易于阅读,在使用下一条OPEN DATASET语句之前应关闭文件。通过CLOSE语句, 可将文件分成逻辑块并易于维护。

    10、3 删除文件

    要在应用服务器上删除文件,使用 DELETE DATASET

    DELETE DATASET语句:

    此语句删除文件。文件命名在打开文件中有说明。如果系统可以删除文件 贝U SY-SUBRC 返回 0,否贝U SY-SUBRC返回 4。

    ,

    10、4 向文件中写入数据

    要向在应用服务器上得文件写入数据,使用 TRANSFER to [LENGTH ] 、

    此语句将字段得值写入文件,可以用OPENDATASET语句指定传输模式。如果 不能打开文件以写入, 贝系统将尝试用二进制模式打开文件, 或为此文件使用 OPEN DATASET 语句得选项。

    字段 得数据类型可以就是基本型,或者就是不包含作为组件得内表格得字段字符串 (内表数据需通过结构进行写入) 。内表格不能在一次执行中写入文件。

    通过 LENGHT 选项,

    TRANSFER语句:

    可以指定传输数据得长度 。系统将第一个 字节写入文件。如果 太小,贝截 断超出得字节。如果 太大,系统将在传输行得右端填入空格。

    10、5 从文件中读取数据

    要从应用服务器上得文件中读取数据,使用

    READ DATASET语句:

    READ DATASET INTO [LENGTH ] 、

    此语句从文件中读取数据赋值给变量 。要决定把从文件中读取得数据赋值给哪 个变量,必须清楚文件结构。

    可以用OPENDATASET语句指定传输模式。如果没有打开文件以读取,则系统将尝试以 二进制模式打开文件或为此文件使用

    OPEN DATASET语句得选项。在读取操作成功后,

    SY-SUBRC将返回0。当到文件末尾时,SY-SUBRC将返回4。当不能打开文件时, SY-SUBRC 将返回 8 。

    如果以二进制模式工作,则可以使用LENGTH选项查找实际传输给字段 得数据长度。 系统可用变量 值设置该长度。

    10、6 使用服务器上得文件

    (1) 通过用户对话向服务器写入数据

    CALL FUNCTION 'DOWNLOAD'

    (2) 不通过用户对话向服务器写入数据

    CALL FUNCTION 'WS_DOWNLOAD'

    (3) 通过用户对话从服务器读取数据

    CALL FUNCTION 'UPLOAD'

    (4) 不通过用户对话从服务器读取数据

    CALL FUNCTION 'WS_UPLOAD'

    (5) 检查服务器上得文件

    CALL FUNCTION 'WS_QUERY'

    十一报表

    11、1 PARAMATERS变量定义输入字段

    可以按照用DATA语句声明字段得方式用 PARAMETER需句声明字段。用 PARAMETERS 语句声明得字段称为参数。 通常,输入字段得所有参数都将出现在选择屏幕上。 系统处理输 入屏幕时,报表用户在这些输入字段中键入得值将被分配给相应得参数。

    要声明参数及其数据类型,使用

    PARAMETER茄句,如下所示:

    PARAMETERS

    [()] [] 、

    该语句创建参数

    。附加项与DATA语句相同。 用户启动报表程序时,

    得输入字段将出现在选择屏幕中。 11、 1、 1 给参数分配缺省值

    要为将显示在选择屏幕上得输入字段分配缺省值,使用 选项。语法如下:

    PARAMETERS

    、、、、、、 DEFAULT 、、、、、、

    可以就是文字或字段名。如果指定字段名,则系统将按缺省值处理该字段得内容, 报表用户可以在选择屏幕中更改缺省值。

    PARAMETER需句得DEFAULT

    系统在初始化事件 INITIALIZATION 之前将缺省值传输给参数。因此,对于那些在用户 启动程序时已经被填充得字段,应该使用字段名而不就是文字作为字段得缺省值。 11、 1、 2 禁止参数显示

    要禁止在选择屏幕中显示参数,使用PARAMETERS^句得NO-DISPLAY选项。语法如下:

    PARAMETERS

    、、、、、、 NO-DISPLAY 、、、、、、

    11、 1、 3 允许参数接收大小写

    要允许用户用大写或小写字母输入参数值, 语法如下:

    PARAMETERS

    、、、、、、 LOWER CASE、、、、、、

    如果没有LOWER CASE选项,系统将所有输入值更改为大写。

    如果使用LIKE选项从

    使用PARAMETER茄句得LOWEFCASE选项。

    ABAP/4 词典中引用字段,参数将接受 ABAP/4 字段得所有属性,不能更改这些属性,也不 能使用LOWER CASE选项,必须在 ABAP/4词典中定义就是否可以输入大写或小写值。 11、 1、 4 必须输入得参数字段

    要保证参数必须输入,使用 PARAMETER需句得OBLIGATORY选项。语法如下:

    PARAMETERS <p>、、、、、、OBLIGATORY、、、、、、 使用该选项时,用户如果不

    在选择屏幕得这个字段上输入值,程序就无法继续执行。 11、 1、 5 创建复选框

    要为参数输入定义复选框,使用

    PARAMETER茄句得AS CHECKBOX选项。语法如下:

    PARAMETERS <p>、、、、、、 AS CHECKBOX、、、、、、

    参数<p>按长度为1得类型C创建。在这种情况下,不允许使用附加选项 LIKE。<p>得有效值就是‘或’X',这些值在用户单击选择屏幕上得复选框时赋给参数。 11 、 1 、 6 创建单选按钮组

    要为参数输入定义单选按钮组,使用 语法如下:

    PARAMETERS <p>、、、、、、 RADIOBUTTON GROUP <radi>、、、、、、

    参数<p>按类型C,长度1创建,并分配到组<radi>。字符串<radi>得最大长度就是4。 允许使用附加得LIKE选项,但就是必须参阅类型为 C长度为1得字段。必须为每个<radi> 组分配至少两个参数,每个组中只有一个参数可以用 DEFAULT 选项分配得缺省值,该值必 须就是‘ X'。

    当用户单击选择屏幕中得单选按钮时,相应得参数被激活

    (分配值’X'),同时同组得

    PARAMETER茄句得RADIOBUTTON GROU选项。

    TYPE与

    其它参数被设为非活动得(赋值‘' )。 11、 1、7 使用内存缺省值

    PARAMETER语句得 MEMORY-ID选项允许从全局 SAP内存使用缺省值。语法如下:

    PARAMETERS <p>、、、、、、 MEMORY ID < p i d > 、、、、、、

    使用该选项时,以名称 <pid>存储在全局用户相关得 SAP内存中得值将作为<p>得缺省 值出现在选择屏幕上。 <pid> 最长 3 个字符,并且不能用引号封闭。

    可以使用全局 SAP 内存在程序间传递保留在事务以外得值。用户在整个终端进程 期间都可利用该内存,并且所有并行进程使用相同得内存。因此

    SAP 内存包含得内容要比

    局限于事务得 ABAP/4 内存更广泛。 参数可以按用户在名为 <pid> 得用户主记录中得说明 进 行设置。 11 、 1 、 8 分配匹配得代码对象

    要给参数分配匹配代码对象,使用 如下:

    PARAMETERS <p>、、、、、、 MATCHCODE OBJECT <obj>、、、、、、

    匹配代码对象 得名称必须就是 4 字符得变量名, 并且不能用引号封闭。 如果使用 该选项,则可能得条目按钮将在参数

    得输入字段之后出现。 就是为执行输入字段得匹配代码选择。 11、 1、9 分配修改组

    要将参数分配给修改组,使用

    PARAMTERS^句得MODIF ID选项,如下所示:

    用户按下该按钮时, 其结果

    PARAMETER齬句得MATCHCODOBJECT选项。语法

    PARAMETERS

    、、、、、、 MODIF ID 、、、、、、

    修改组得名称必须就是不带引号

    得3字符变量名。MODIF1D选项总就是把

    分配到内表SCREEN得SCREEN-GROUP歹U。

    在AT SELECTION-SCREEN OUTPUT事件中,分配给修改组得参数可以用 SCREEN/MODIFY SCREE语句按整个组进行处理

    LOOP AT

    11、2 SELECT-OPTION定义选择标准

    系统为每个SELECT-OPTIONS语句创建选择表。选择表得目得就是按标准化得方式保存 复 合选择。选择表就是一个带表头行得内表。它得行结构就是字段字符串,由四个组 件构成,即 SIGN、 OPTION、 LOW 与 HIGH。

    SIGN表示保存在 OPTION中得运算符就是否需要翻转,允许值 包含选择运算符;LOW与HIGH中得内容为间隔选择指定上界与下界。

    要创建在选择屏幕中填充得选择标准,可以使用

    SELECT-OPTIONS FOR

    SELECT-OPTIONS语句,如下所示:

    就是I与E ; OPTION

    该语句创建选择表,该表与数据库表得列 或内部字段相连接。该 数据 库表必须在程序中用 TABLES 语句声明。选择表 由报表用户在选择屏幕中填充。 11、 2、1 给选择标准分配缺省值

    要给将显示在选择屏幕得选择标准分配缺省值, 使用 SELECT-OPTIONS 语句得 DEFAULT 选项。语法如下:

    SELECT-OPTIONS FOR

    DEFAULT [TO ] [OPTION ] SIGN

    得缺省值可以就是实际值 (在单引号中)或就是字段名,该字段得值将用做

    缺省值。用于设定LOW字段,用于设定HIGH字段。

    对于单值选择,可以就是 EQ、NE、GE GT LE、LT、CP或NP,缺省值就是 EQ。 对于期间选择,可以就是BT或NB,缺省值就是 BT。

  • 因篇幅问题不能全部显示,请点此查看更多更全内容