寒假SAP ABAP 培训笔记 part 2{转载}

内表的建立

标准内表建立

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值