ABAP指针的使用以及动态动态程序的实现

2.ABAP指针的使用以及动态动态程序的实现

2.1 定义一个指向变量的指针

关键字:FIELD-SYMBOLS【定义一个指针】 (ASSIGN是将变量的地址赋值给指针)

DATA str TYPE  string VALUE 'hello sap '.
FIELD-SYMBOLS:<s> TYPE string.
ASSIGN str TO <s>."指针指向变量的地址
WRITE :<s>.

2.2将内表的值动态的赋值给指针

可以将数据表或者数据结构赋值给指针,通过指针来修改或者而直接访问表的字段

DATA: lt_mara LIKE STANDARD TABLE OF mara WITH HEADER LINE.
FIELD-SYMBOLS:<tab>   TYPE any,
              <field> TYPE any.
SELECT
  MARA~MATNR
  MARA~MTART
  MARA~WRKST
  INTO CORRESPONDING FIELDS OF TABLE lt_mara UP TO 5 ROWS
  FROM mara.
  LOOP AT lt_mara.
    ASSIGN lt_mara TO <tab>.
    WHILE sy-subrc = 0.
      ASSIGN COMPONENT sy-index OF STRUCTURE <tab> TO <field>.
      WRITE / <field>.
    ENDWHILE.
  ENDLOOP.

3.常用的Open SQL 控制语句

3.1 select语法

3.1.1 查询基础语法

关键字:SINGLE 两个函数max() count()

DATA:l_matnr1 TYPE matnr,
     l_matnr2 TYPE matnr,
     l_cnt    TYPE i.
SELECT SINGLE matnr INTO  l_matnr1 FROM mara WHERE matnr = 'ML_RM_228'."数据表中取值到指定变量使用: 关键字(SINGLE)
SELECT COUNT(*) INTO l_cnt FROM mara."获取表中数据的总行数
SELECT MAX( matnr ) INTO l_matnr2 FROM mara."获取最大值
WRITE: l_matnr1, / l_cnt, / l_matnr2.

关键字:CORRESPONDING【CORRESPONDING FIELDS OF 】: 将查询的数据和插入的数据按照内表的字段名自动匹配,名称相同的字段分配数据。

DATA:lt_mara TYPE TABLE OF mara WITH HEADER LINE."定义一个内表
DATA:ls_mara TYPE mara."定义一个表结构
SELECT SINGLE
  *
  INTO CORRESPONDING FIELDS OF ls_mara
  FROM  mara
  WHERE matnr = 'ML_RM_228'.
  WRITE ''.

3.1.2 表的联合查询

如果某些字段使用了函数(max count min) ,则需要将其他输出的字段进行分组(group by),

案例:

select
 s.id 
 max(score)
 from 
 student as s
 where s.id = '001'
 group by  s.id.

如果对使用了函数的字段进行条件筛选,则可以使用关键字:having

案例:

select
 s.id 
 max(score)
 from 
 student as s
 where s.id = '001'or s.id ='002'
 group by  s.id
 having max(score) > 600.

将查询的结果进行排序(order by

案例:

select
 s.id 
 max(score)
 from 
 student as s
 where s.id = '001'or s.id ='002'
 group by  s.id
 having max(score) > 600
 order by s.id asc /desc ."升序/降序

3.1.3 限制Open SQL获取数据条数

使用UP TO N ROWS 显示读取数据的条数,

案例:销售汇总表输出销售最大的前5 条数据

TABLES :spfli."航班计划
DATA:lt_spfli LIKE STANDARD TABLE OF spfli WITH HEADER LINE .
SELECT
  *
INTO CORRESPONDING FIELDS OF TABLE lt_spfli UP TO 5 ROWS
  FROM spfli.

UP TO N ROWs不能连续的读取数据,使用关键字:PACKAGE SIZE N 可以连续的读取数据

注意: 使用Package size n 必须拥有select … endselect

TABLES :spfli."航班计划
DATA:lt_spfli LIKE STANDARD TABLE OF spfli WITH HEADER LINE .
SELECT
  *
    FROM spfli
    INTO CORRESPONDING FIELDS OF TABLE lt_spfli PACKAGE SIZE 5.
  LOOP AT lt_spfli.
    WRITE :/ lt_spfli-carrid, lt_spfli-connid, lt_spfli-airpfrom.
  ENDLOOP.
ENDSELECT.

3.1.4 参照内表数据进行查询

使用语法FOR ALL ENTRIED IN itab,

注意使用这个语句时,必须要判断是否为空【IF NOT itab IS INITIAL】,如果为空,不进行查询。

3.2 update 更新语法

update 表名 set  字段1 = ''
                字段2 = ''
            where id = ''.

3.3insert 插入语法

定义结构新增数据

直接复制
insert into()表 value().

3.4 delete 删除语法

delete from tabel where id =''.

3.5 modify 语法

MODIFY 修改表的数据时,如果存在数据,直接修改数据,不存在的时候,则在数据表中新增一条数据, 但是执行的效率比insert 和 update低。
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值