文章目录
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低。