SAP ABAP PA certification 培训笔记 part 7{转载}

课前复习

P (4)    长度4个字节

Xstring (10)  长度为10个字节,可以容纳20个数字

大结构体与小结构体的兼容

 

Move 大 to 小  大的覆盖小的  大结构体的剩余部分保持不变

Move 小 to 大   匹配的部分 被小的覆盖, 其余的字段被初始化

 

P 类型 F类型的优缺点

P:计算精确,适合商业结算,但范围短

F:储存范围大,计算不精确

 

P F 类型的运算方式

F IEEE 用二进制数进行运算

P 采用半字节储存一个数字的方式进行运算

字段 结构体 兼容问题

1.         字段兼容:类型和长度相同

2.         结构体:字段按顺序兼容,并且字段数相同

3.         内表兼容:行类型相同, KEY 兼容,表类型相同

 

如果字符串 move 到一个比字符串小的结构体 ,

 

[][][][] ---à [][]

         [][]

 

一个字段 move 到一个 内表中

 

 

Internal table 内表.

1.         静态数据对象包括: 简单数据类型(除了string 和xstring 类型), 结构体(不包含string 和xstring 类型)

2.         动态数据对象:string , xstring , 包含string 或 xstring 的结构体, 内表

 

一个结构体是否可以包含STRING 或xstring,  如果可以 结构体可以拓展吗?

 

 

定义一个 只有一个字段的 内表 字段长度是c(18),

定义一个结构体 结构体里 包含三个字段, 类型 随意,  第二个类型,是另一个结构体

定义一个内表 内表的行类型 是第一个结构体.

再用第二个结构体定义一个内表 ,利用这个内表 作为行类型,做一个内表

 

内表的三个基本属性

1.       line type 行类型

2.       key definition 键类型

3.       table kind 表类型

 

1)        在standard table 使用 table key的查找方式为 table scan 全表扫描

2)        在 sorted table 中使用table key 在遵循; left-aligned 从左至右匹配, no gaps 没有间隔,使用”=” 填充字段时, 使用 二分查找法 ,其它情况下  使用 table scan查找

3)        对hash表访问, 只能通过key访问单条记录, 访问的速度不依赖于表中的数据量,而在其余两种表中,查询的时间与表中数据量成正比

 

 

其它情况是否代表,只是顺序不符合left-aligned. 哈希表可以通过部分的key 进行访问吗?

 

定义内表

1.       定义一个局部内表类型,通过该类型定义内表变量

2.       直接定义字段 直接定义内表变量(隐藏了一个内表类型)

3.       通过全局内表类型定义内表变量

 

标准的定义内表语句

Types or DATA name

TYPE table_kind

OF line_type

WITH key_def

[INITIAL SIZE n.]

 

 

Table kind and key. 表类型 表键

注意:在定义standard类型的内表时,如果使用 WITH DEFAULT KEY. 系统会自动将内表中的字符类型字段(c,n,d,t,x,string,xstring)组合成table key.

 

内表的key

1.         standard标准表: key 不唯一.

2.         sorted排序表: 可以指定KEY是否唯一

3.         Hash 哈希表: KEY必须是唯一

 

在内表中使用不是结构体类型的行类型

当内表的行类型只有一列的时候,需要使用pseudo-compnent 伪列,

用途:设置一个按钮工具栏,用只含有一列的内表.

 

对内表的操作

 

1.       move对内表的拷贝

2.       clear 将数据清空

3.       free 释放内存

4.       compare表之间的操作,比较

5.       sort 排序表

6.       array fetch

 

递归比较

1.       先对内表之间的行数进行比较

2.       如果有必有的话,还需要对行的组件进行比较

 

内表之间的比较

用行数比较, 有必要的话 可以 用内容比较

定义两个内表  两个 内表不兼容 一个有3个字段 一个有5个

对两个内表进行比较.

 

定义两个内表, 结构一样 , 变量不一样

全做成数字型字段  

第一个  添加 小数字

第二个内表 添加大数字

 

排序可以指定升序降序.

 

对内表具体操作

1.         Insert  插入

2.         Read  读取

3.         Change 修改

4.         Delete 删除

5.         Insert summated collect. 插入累计

 

 

对内表中的数据行进行限制条件操作

 

对数据的访问

一、单条数据访问

1)        通过 table key访问

2)        通过 line index 访问(对于line index 类型内表)

3)        通过 condition条件访问

二、多条数据访问

1)        通过condition条件访问

2)        通过 index interval 通过行区间访问

 

 

指定访问数据的传输方式

1.       使用 结构体 work area 进行 copy 对内表数据进行操作

2.       定义 field symblo 指针 指向访问数据,(可以直接访问数据)

3.       通过将内表插入内表的操作

 

重要: 不能通过line index hash 进行访问, 在排序表中插入数据.除非插入的位置 正好是排序表中规定的位置,否则会出现 运行期异常(强烈不推荐使用insert sorted b表中插入数据)

 

 

Field symbol 指针

 

作用: 直接对内表进行操作,而不用再重新定义结构体对目标内表数据进行拷贝, 增大了效率.

 

定义指针语法:

Data: var_a TYPE I VALUE 4.

FIELD-SYMBOLS: <fs> TYPE i.

 

ASSIGN var_a TO <fs>.

<fs> = 77.

 

重要: 定义的指针名,必须加”<>”

 

 

Insert 插入操作

一、             单条数据的插入操作

1)        标准表: 可以使用 index (推荐) 和 table key 方式插入

2)        排序表: 可以通过 table key方式插入 , 但也可以用index插入(强烈不推荐, 很有可能出现运行错误)

3)        Hash表: 只能够用table key 方式插入

二、             多条记录的插入

1)          源内表为 index table : 则可以指定源内表的数据范围,并插入到目标内表中

2)          目标内表为index table: 则可以可以指定目标内表被插入数据的具体index 位置.

 

具体的语句插入语法:

Insert wa INTO TABLE itab.  单条插入不指定位置

 

Insert wa INTO itab INDEX n.  单条插入指定插入位置

 

INSERT LINES OF itab1

[from n1 to n2]

INTO TABLE itab2.

INTO itab2 [ INDEX n]

读取 内表的一条 将数据 读到结构体中

 

如果系统独到行  sy-subrc = 0 . 然后读取到结构体中,

 

Sy-tfill 存放总行数

Sy-tleng 行的长度

 

Transporting

指定特定列 传输字段  ,  传送部分字段

 

TRANSPORTING NO Fields 不传值, 作用 ,看内表中 有没有 这条数据

 

 

Camparing

  有一个结构体 和内表

 C1 C2 C3

 Lh 0019 17

 Lh 0018 18

 

通过comparing 后的值, 可以判断读取的值是否符合要求.

现在结构体中需要比较的字段赋值,

先判断 相应字段是否相等

回去做个练习

比较成功 sy-subrc = 0

Zmycompare_2009

 

 

用一个结构作为 查询条件,

到内表查询符合条件的数据

 

 

With key 可以用 table key 或 普通字段作为条件

 

使用field symbol

 

通过一个内表  定义一个 结构体 作为 指针

 

Read table itab [index n / key ] assigning <fs>.

 

Write: / <fs>-field_1.

 

直接修改 <fs> 的值 会怎么样?

 

Change 修改内表

 

Transporting  的 传输方向

 

 

 

通过 field symbol

直接修改 内表

 

重要: 不能直接指针对sorted 和 hash表进行操作

 

 

Delete

 

Delete table itab key

Key:  from wa ()

With table key k1 = f1….

 

 

 

不能用sort 对排序表进行排序

对 sorted 表进行 insert modify , 使用不当 可能会出错

HASH表不能通过 index 进行操作

 

Header line

 

With head line 关键字定义  废弃用法

 

Occur + 整数, 10 ,

Occur 0 , 默认大小,

 

Occur 0 with head line  废弃用法了

 

重要: 在面向环境中 不能用带有 head line 的内表

 

 

 

Data: so_carr LIKE RANGE OF carrid.

 

 

 

Loop 内表

Where 条件 从起始点二分查找

 

 

标准表 可以部分指定顺序

 

From 1 to 5

 

对于一个标准表来说, 加上二分查找  是不是 先排序

先把标准表 排序, 然后再二分

 

必须先手工排序,再进行二分查找

 

转自: http://blog.sina.com.cn/s/blog_5cdacb630100ce98.html~type=v5_one&label=rela_nextarticle

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值