内表的建立
标准内表建立
Types tt_flightinfo
Type standard table of sbc400focc
With non-unique key carrid connid fldate.
Data itab_flightinfo type tt_flightinfo.
1. data itab type <table type>.
2. data itab type (standard / sorted / hashed) table of <structure type> with .. key..
3. data itab type table of <structure type>.
如果建立的是数据库表而不是表类型
则需要把上述type 改写成like
对内表的操作
Append : append wa to itab.
Insert : insert wa into itab <index>.
Read : read table itab into wa with key/ index 条件<condition>.
Change : modify [table] itab from wa [<condition>]
Delete : delete itab <condition>
Se_38 查看程序 输入程序名
显示季节(提取数据中的部分数据)
系统用于表示日期 sy-datum 类型为D-----YYYYMMDD
12 , 1, 2 冬
3,4,5 春
6,7,8 夏
9,10,11 秋
通过判断2008022的第5,6位 来判断季节
Sy-datum+4(2) 代表日期的5,6位, 注意:“+”前后 没有空格
编写程序时 要在声明结束后加入 start-fo-selection 表示程序开始
内表的loop
Loop at 运行机制:
先从内表中获得一条记录,然后放到结构中,通过结构显示数据,最后清空结构.
Loop at 中的 delete itab 只删除当前工作区对应的一条数据
Loop at XXXX into XX from 1 to 5.显示1—5行的数值
当只有 from 1 时 表示 1到最后.
Read table XXXX into XX index 3 显示第3行
Loop at XXXX into XX from where carrid = ‘LH’. 特定行显示
Read table XXX into XX
With (table) key carrid = ‘LH’
Connid = 0400
Flade = sy-datum.
条件中间 没有符号 只有 空格
如果有多条符合条件的数据 使用read只能读取第一条数据
Sort 对内表进行排序
Sort XXXX. 把内表进行排序 (默认根据第一个字段 升序)
Sort XXXX by carrid.
Sort XXXX by percentage descending
Carrid ascending.
在真实项目中大量数据可能取重,但如果 进行sort排序则内表数据则不重复(老师说的~)
内表要进行排序 然后删除重复行
SORT <内表> BY <字段> [ascending/descending].
DELETE ADJACENT DUPLICATES FROM <内表> COMPARING ALL FIELDS.
Sy-uzeit 表示系统时间 T类型 HHMMSS
str-ebelp+4(3) <> '' 第5-7位 不为空
内表工作区
拥有工作区的内表
根据内表作结构 (与系统表结构相同的内表 建立结构 会比较方便)
Data wa_scarr like line of it_scarr.
当内表定义了表头行 with header line 则不用再定义 工作区
Loop at 内表 后的工作区名称也可以省略
此时内表与工作区重名
Data: begin of XXX occurs 0,
…..
End of XXX.
定义了 带有表头行的内表
读取数据库中的数据
ABAP数据库可以是任意数据库 Open SQL
ABAP拥有一个数据库缓冲区
经常使用的 数据可以放入 缓冲区中 以节省数据调用的时间
Select X from Y into Z where <condition>
取单条数据 select single * from X into Y. 注意:字段之间没有”,” 只有空格
Select single a b c
From X
Into corresponding fields of Y. -----匹配赋值
Where…
分配时 需要字段名称相同 类型相同 长度相同~?
内表字段的类型 必须要和 数据库表字段类型 相同 但长度可以不同, 如果类型不同 ,编译不会出现错误,而运行时会出现错误.
取多条记录 select a b c (强烈不推荐)
From X
Into Y
Where …..
End select.
Select * from carr into table itab_focc (推荐)
Where …
读取两个表的时候 inner join ( 两个表以上 会影响速度)
数据库操作 数据 ----结构----内表------数据库表
选择单行数查询(全部字段):
data wa_spfli type spfli.(定义内表)
select single *
from spfli
into wa_spfli
where cityfrom = 'FRANKFURT' and cityto = 'TOKYO'.
推荐:选择单行数查询(指定字段):
data wa_spfli type spfli.
select single carrid connid
from spfli
into corresponding fields of wa_spfli
where cityfrom = 'FRANKFURT' and cityto = 'TOKYO'.
插入单行数据数据 insert into 数据库名 values <结构名>
插入多行记录 insert 数据库名 from table <内表名>
.查询后放入内表:
data: begin of wa_spfli,
cityfrom type spfli- cityfrom,
cityto type spfli- cityto,
end of wa_spfli.
data itab_spfli like table of wa_spfli.
select cityfrom cityto
from spfli
into corresponding fields of table itab_spfli
where cityfrom = 'SINGAPORE' and cityto = 'TOKYO'.
多表查询: 查询在新加坡的航空公司名
DATA: wa_carrname TYPE scarr-carrname,
wa_carrid TYPE spfli-carrid,
wa_connid TYPE spfli-connid.
SELECT carrid connid
FROM spfli
INTO (wa_carrid,wa_connid)
WHERE cityfrom = 'SINGAPORE'.
SELECT carrname
FROM scarr
INTO wa_carrname
WHERE carrid = wa_carrid and connid = wa_connid.
WRITE / wa_carrname.
ENDSELECT.
ENDSELECT.
结果出现了 重复数值 所以不是很实用.
由于其他字段有 不同的值 所以数据没有重复
更新单行数据:
update <数据库表> from <结构名>
update <数据库表>
set <f1> = <g1>….
Where <修改条件>.
更新多行数据:
Update <数据库表>
From table <内表>
如何使用操作查看数据库表的数据?
查看数据库表结构 有一个按钮可以 查看数据库表的数据
如果建立了一个带有表头行的 内表~
想要在内表中添加数据 需要 append XX.
时时分析 运行时间的分析
右键点击程序 execute----runtime analysis
Excute 键
输入数据 (键入空格 可以 出现曾经出现的记录)
运行
后退到 分析界面
Analyse 出现分析结果
Subroutines(子程序) 有参数
在子程序中写perform + 子程序名称
在子程序中
右键 create subroutine 放入主程序
程序事件.
LIST
Selection screen 选择屏幕
输入用户想要输入的条件
第二个Single vals 表示不等于
如果
_____to _____
只输入第一个 表示 符合第一个条件的数据
只输入第二个 表示 从开始 到第二个条件 所有满足条件的数据
Parameter 单值
Tables 表明 -----------引用表
Select-options [X] for(相当于 like) 某个字段 当作选择条件
变式--- 输入参数 保存后便可以保存变式
Function modules 函数
输入参数 import para
输出参数 export para
改变参数 changing para
例外情况 sy-subrc 正常为0
Call Function 的调用 的接口 与function 接口的 类型相反
Se37 查看函数
经验 取决于 function
在程序中调用 function
Pattern 输入function 确定
Debug 中 尽量不要进入function
点击第二个键子
转自:http://blog.sina.com.cn/s/blog_5cdacb630100ceaa.html~type=v5_one&label=rela_nextarticle