求助ABAP----两个语法无效

求助ABAP----两个语法无效,第1张

1 'SET LEFT SCROLL-BOUNDARY COLUMN col'means tofix the columns before col when you scrollingcol 'svalue is the system variant SY-COLNO, not your table column you can use debug to see the current column number2 DELETE ADJACENT DUPLICATES FROM test_itab comparing all fieldslearn to use F1 helpto solve the easy problems by yourself, it will help youmoreby the way,you need to write more columns if you want to see the effect of 'SET LEFT SCROLL-BOUNDARY COLUMN col'

ABAP中的内表相当于其他程序设计语言中的二维数组,存储多行结构相同的数据

不同于二维数组,内表在创建后,列结构与列数是固定不变的,而行数是动态增长的

内表支持循环对每行数据进行 *** 作,也支持整体 *** 作

内表是具有行和列的表结构,然而,不同于数据库表,内表仅在程序运行期间在内存中存储数据

ABAP中有三种内表类型:标准表,哈希表,排序表

-- ABAP内表数据类型

内表数据对象是实际的内表,可以用数据进行填充

内表数据类型是用于定义内表数据对象的抽象数据类型(ADT)

可以使用的内表数据类型有:

Structure

数据库表

用户自定义数据类型

--ABAP内表声明

1>

TYPES: BEGIN OF line,

field1 TYPE i,

field2 TYPE i,

END OF line

声明一个数据类型

DATA: ITAB_WA TYPE(LIKE) line “ 声明一个内表工作

DATA: ITAB TYPE(LIKE) line OCCURS 0 “ 声明一个无工作区的内表

DATA: ITAB TYPE(LIKE) STANDARD TABLE OF line INITIAL SIZE 0 “ 声明一个有工作区的内表

DATA: ITAB TYPE(LIKE) line OCCURS 0 WITH HEADER LINE

DATA: ITAB TYPE(LIKE) STANDARD TABLE OF line INITIAL SIZE 0 WITH HEADER LINE

2>

DATA: BEGIN OF line,

field1 TYPE i,

field2 TYPE i,

END OF line

声明一个line对象,该对象可以作为工作区使用

用DATA定义的line本身也是一个结构类型,也可再声明一个工作区

DATA: ITAB_WA TYPE(LIKE) line “ 声明一个工作区

DATA: ITAB TYPE(LIKE) line OCCURS 0 WITH HEADER LINE “ 声明一个带工作区的内表

DATA: ITAB TYPE(LIKE) STANDARD TABLE OF line INITIAL SIZE 0 WITH HEADER LINE “ 声明一个带工作区的内表

3> 直接定义内表,这个内表是有工作区的

DATA: BEGIN OF ITAB OCCURS 0 ,

CARR1 LIKE SPFLI-CARRID,

CONN1 LIKE SPFLI-CONNID,

END OF ITAB

DATA: ITAB1 TYPE ITAB(错误的,实践证明,定义出来的什么都不是)。

正确方法:ITAB1 TYPE ITAB OCCURS 0(这样定义后的是一个无工作区的内表)。

DATA: ITAB1 LIKE ITAB OCCURS 0 WITH HEADER LINE “定义一个带工作区内表

4> type ref to 定义内表

type ref to 属于ABAP中面向对象的编程。它是定义一个类的对象。

5>通过数据库表定义

data itab1 type table of sflight “ 定义一个不带内表的工作区

data wa1 like line of sflgit “ 定义一个内表工作区

data itab1 type table of sflight with header line “定义一个带内表的工作区

-- 两种内表定义方式的主要区别在于是否有隐式表头

内表是按行进行访问的,然而,程序对内表的行 *** 作不能直接进行,必须使用一种接口来传输,这个接口就是工作区(Work Area)

--内表 *** 作

填充内表行

append <wa> to <itab> “ 不带表头行的填充

append <itab> “ 带隐式表头行的填充

插入内表行

insert <wa> into <itab> [INDEX idx] “

insert <itab> [INDEX idx ] “ 隐式表头行插入内表

-- 如果没有指定INDEX ,则默认插入到内表最后一行

读取内表行

read <itab> into <wa> [INDEX idx]

read <itab> [INDEX IDX]

修改内表行

modify <itab> from <wa> [INDEX idx]

modify <itab> [INDEX idx]

-- read itab index 3

-- itab-XX = ‘xxx’

-- modify itab index 4

删除内表行

delete <itab> [INDEX idx]

-- 带表头行和不带表头行语法一致 。

内表循环

Loop at <itab> into <wa>

<statement block>

endloop “ 带表头行的内表循环 *** 作

Loop at <itab>

<statement block>

endloop “ 不带表头行内表 *** 作

-- 循环体的MODIFY,DELETE等语句不必指定INDEX项,系统默认处理当前行

-- 如果不需要读取所有的内表行,可以使用WHERE选项进行限制

-- LOOP AT <itab> [WHERE <conditions>]

清空内表

clear <itab> “清空不带表头行内表

clear<itab>[] “清空带表头行内表

内表排序

SORT <itab> [ASCENDING | DESCENDING] [AS TEXT]

--ASCENDING和DESCENDING指定升序还是降序排列,如果不指定,缺省排序方式是升序

--AS TEXT影响字符字段的排序方式,如果不使用该选项,系统将按字符平台相应内部编码进行排序,否则,系统根据当前语言按字母顺序排序字符字段

删除重复行

DELETE ADJACENT DUPLICATES FROM <itab> [COMPARING <comp>]

-- 删除重复行之前须对内表进行排序

判断内表行数

DESCRIBE TALBE <itab> LINES <count>

将内表中部分或全部的数据行整体插入另一内表

INSERT LINES OF <itab1> [FROM n1] [TO n2] INTO [TABLE] <itab2> [INDEX <idx>]

-- insert lines of itab1 from 1 to 100 into itab2 “ 将内表1前100行数据附加到内表2

-- 两个内表必须具有相同的或可转换的行结构

将内表中部分或全部的数据行整体填充到另一内表

APPEND LINES OF <itab1> [FROM n1] [TO n2] TO <itab2>

按照条件或者索引删除一组选定行

DELETE <itab> [FROM n1] [TO n2] [WHERE <condition>]

-- delete itab1 from 1 to 100 where age >30 "删除内表前100行中年龄大于30 的记录 。

整体复制内表,目标内表原有内容被覆盖

MOVE <itab1> TO <itab2> 不带表头行的内表之间进行复制

MOVE <itab1>[] TO <itab2>[] 带表头行的内表之间进行复制

MOVE <itab1> TO <itab2>[] 不带表头行的内表复制到带表头行的内表

MOVE-CORRESPONDING <itab1> TO <itab2> 复制内表1中与内表2具有相同结构的字段进行复制,同样适用于工作区

select 后面的字段如果比into table后面的字段多,程序运行的时候就会Dump掉,这时候你需要用SELECT XXX INTO CORRESPONDING FIELDS OF TABLE YYY, 但是这时候你需要select后面的字段名要与table后面的内表中的字段名一一对应。如果用这个语法,字段名不对应的就没有值。

如果select后的字段与into table的内表中的字段数量一样,且table中的字段类型与数据库表中的一样,用select XX into table YYY的时候不会Dump,但字段类型的顺序要一样。

例如:

DATA: BEGIN OF wa_a,

bname TYPE xubname,

spdb TYPE xuspdb,

col1 TYPE xuspda,

END OF wa_a,

it_a LIKE TABLE OF wa_a

SELECT bname

spdb

spda

FROM usr01

INTO TABLE it_a

这样可以取到3个字段的值

DATA: BEGIN OF wa_a,

bname TYPE xubname,

spdb TYPE xuspdb,

col1 TYPE xuspda,

END OF wa_a,

it_a LIKE TABLE OF wa_a

SELECT bname

spdb

spda

FROM usr01

INTO CORRESPONDING FIELDS OF TABLE it_a

这样可以取到前两个字段的值

DATA: BEGIN OF wa_a,

bname TYPE xubname,

spdb TYPE xuspdb,

END OF wa_a,

it_a LIKE TABLE OF wa_a

SELECT bname

spdb

spda

FROM usr01

INTO TABLE it_a

这样程序就会Dump

以上就是关于求助ABAP----两个语法无效全部的内容,包括:求助ABAP----两个语法无效、详解ABAP/4内表结构、abap中 内表的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9649388.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存