Tables
使用TABLES语句定义ABAP数据字典中的数据表、视图、结构体,会生成与ABAP数据字典具有相同结构的数据对象。这种表工作区,在程序中与结构体的用法相同。
定义:Tables:表名称
使用:
select * from 表名称 where 字段名 = ’‘.
endselect.
调用子程序(Form)
1、form的定义
子程序是以form开始,以endform结束
定义
form 子程序名称.
`代码内容`
exit--直接跳出子程序
check--满足条件执行为假跳出子程序
endform.
form 子程序名称 using 参数名称1 Type/like 类型
参数名称2 Type/like 类型.
`代码内容`
endform.
form 子程序名称 changing 参数名称1 Type/like 类型
参数名称2 Type/like 类型.
`代码内容`
endform.
form 子程序名称 using 参数名称1 Type/like 类型 参数名称2 Type/like 类型 changing 参数名称3 Type/like 类型.
.
`代码内容`
endform.
form 子程序名称 using 参数名称1 Type/like 类型 参数名称2 Type/like 类型 value(参数名称3).
.
`代码内容`
endform.
2、form的调用
调用内部子程序:
perform 子程序名称.
perform 子程序名称 using 参数.
perform 子程序名称 changing 参数.
perform 子程序名称 using 参数1 参数1 changing 参数3. --参数1,2,3可在子程序中变化后返回出来
perform 子程序名称 using 参数1 参数1 参数3. -- 参数1,2可在子程序中变化后返回出来;参数3可在子程序中变化但不会返回出来
调用外部子程序
perform 子程序名称(程序名) if found --[if found]意思是当找到这个程序的时候调用
宏与INCLUDE程序的应用
1、宏(macro)的定义与应用
如果我们想在程序中多次重复使用同一组语句,我们需要将它们包含在宏中。
局部宏:只能在定义它的程序中使用宏。宏定义应在程序中使用宏之前发生。
全局宏:TRMAC
定义
DEFINE macro_name.
&1--第一个参数
&2--第二个参数
有几个参数传几个参
END-OF-DEFINITION.
使用
macro_name '' '' --后面是参数
定义宏
define mac_1.
write: / 'this is mac &1'.
end-of-definition.
定义屏幕
parameters p1 type c as checkbox. --定义勾选框
parameters p2 type c as checkbox.--定义勾选框
parameters p3 type c as checkbox.--定义勾选框
start-of-selection.
if p1 = 'X'. --如果p1被选中
mac_1 1. --调用宏并传参
endif.
if p2 = 'X'. --如果p3被选中
mac_1 2. --调用宏并传参
endif.
if p3 = 'X'. --如果p3被选中
mac_1 3. --调用宏并传参
endif.
2、Include 的用法
Include 调用的东西可以在其他程序内调用,只要参数合法都存在就可以
INCLUDE程序是用于模块化源代码的全局存储库对象。
INCLUDE结构复用
INCLUDE {{TYPE struc_type} | {STRUCTURE struc} }
--该语句只能用在定义结构的BEGIN OF与 END OF之间。作用是将结构类型struc_type与结构变量struc的所有组件字段拷贝到当前结构定义的指定位置
include 名称. --使用,双击不存在可以创建文件
可以把代码放在include文件里面,缩减主代码长度
pingmu文件内代码:
parameters p1 type c as checkbox. --定义勾选框
parameters p2 type c as checkbox.--定义勾选框
parameters p3 type c as checkbox.--定义勾选框
定义宏
define mac_1.
write: / 'this is mac &1'.
end-of-definition.
定义屏幕
include pingmu
start-of-selection.
if p1 = 'X'. --如果p1被选中
mac_1 1. --调用宏并传参
endif.
if p2 = 'X'. --如果p3被选中
mac_1 2. --调用宏并传参
endif.
if p3 = 'X'. --如果p3被选中
mac_1 3. --调用宏并传参
endif.
演示
数据定义
data: begin of st_peopleinfo, --开始定义用户字段集
data addr type string. -- 定义一个地址字符串类型
include structure zspeople. -- 引用定义一个已经存在结构体
data telephone type string. -- 定义一个手机号字符串类型
data end of st_peopleinfo . --结束定义用户字段集
start-of-selection
字段赋值
st_peopleinfo-字段名1 = 'ac'.
输出内容
write st_peopleinfo-字段名1.
输出结果:ac
OPEN SQL 与NATIVE SQL
OPEN SQL 读取数据-SELECT语句
OPEN SQL 读取数据-INTO语句
和SQL语法差不多,不多记录,sql会了就基本会了
-- 读一条
data : ltable type 表名称
select single * into ltable from 表名称
--指定字段赋值
data : zclo1 like 表名称-clo1,
zclo2 like 表名称-clo2.
select single clo1 clo2 into (zclo1,zclo2) from 表名称
-- 去重
select distinct * from 表名称
-- 别名
select * from 表名称 as tb1 where tb1~字段2 = 参数值2
-- 指定列赋值
select single clo1 clo2 into corresponding fields of 自定义表名称 from 表名称
-- 读多条
data : ltable type 表名称
select * into ltable from 表名称 where 字段1 in 参数值1 and (字段2 = 参数值2).
write: / ltable-字段1
endselect.
-- 读多条
data: ltable like table of 表名称 with header line.
select * into table ltable from 表名称 .
-- 取前5行
select * into table ltable package size 5 from 表名称 .
-- 在已有的基础上附加
select * appending table ltable from 表名称 .
-- 动态字段
data: ltable like table of 表名称 with header line.
data fds(72).
fds = 'clo1 clo2 clo3'.
select (fds) into corresponding fields ofltable from 表名称
-- 多动态字段
data: ltable like table of 表名称 with header line.
data fds(72).
data: ltclo like table of fds.
fds = 'clo1'.
append fds to ltclo.
fds = 'clo2'.
append fds to ltclo.
fds = 'clo3'.
append fds to ltclo.
select (ltclo) into corresponding fields ofltable from 表名称
查询
select * into table 自定义表名称 from 数据库表名称 where 字段1 in 参数值1 and (字段2 = 参数值2).
-- in 范围值
查询条件
排序
sort 自定义表名称 by 字段1 字段2 字段3 .
???
delete adjacent duplicates from 自定义表名称 comparing 字段1 字段2 字段3 .
--inner join
SELECT A~MATNR A~CHARG A~CODE A~MACAT A~SUBCAT A~GWEIGHT B~MACATN
FROM ZS1MMT_BATCH AS A INNER JOIN ZS1MMT_MACAT AS B
ON A~MACAT = B~MACAT
INTO CORRESPONDING FIELDS OF TABLE GTTOTAL
WHERE A~MATNR = P_ZMATNR
AND A~MACAT IN S_ZMACAT.
-- left outer join
SELECT A~MATNR A~CHARG A~CODE A~MACAT A~SUBCAT A~GWEIGHT B~MACATN
FROM ZS1MMT_BATCH AS A LEFT OUTER JOIN ZS1MMT_MACAT AS B
ON A~MACAT = B~MACAT
INTO CORRESPONDING FIELDS OF TABLE GTTOTAL
WHERE A~MATNR = P_ZMATNR
AND A~MACAT IN S_ZMACAT.
--多表select
-- 1 单独查询出两表
-- 2 两表循环内表赋值
SELECT A~MATNR A~CHARG A~CODE A~MACAT A~SUBCAT A~GWEIGHT
FROM ZS1MMT_BATCH AS A INTO CORRESPONDING FIELDS OF TABLE ZTBATCH
WHERE A~MATNR = P_ZMATNR
AND A~MACAT IN S_ZMACAT.
IF ZTBATCH IS NOT INITIAL.
SELECT MACAT MACATN
FROM ZS1MMT_MACAT INTO CORRESPONDING FIELDS OF TABLE ZTMACAT
FOR ALL ENTRIES IN ZTBATCH
WHERE MACAT = ZTBATCH-MACAT.
SORT ZTMACAT BY MACAT.
ENDIF.
LOOP AT ZTBATCH INTO ZSBATCH.
CLEAR GSTOTAL.
MOVE-CORRESPONDING ZSBATCH TO GSTOTAL.--BATCH 表数据放到集合内表中
READ TABLE ZTMACAT INTO ZSMACAT
WITH KEY MACAT = GSTOTAL-MACAT
BINARY SEARCH.
IF SY-SUBRC = 0.
GSTOTAL-MACATN = ZSMACAT-MACATN.
ELSE.
-- CONTINUE.--终止当前循环,并执行下一次循环
ENDIF.
APPEND GSTOTAL TO GTTOTAL.
ENDLOOP.
data: gv_connid like sflight-connid.
exec SQL.
select a.connid into :gv_connid from sflight a where a.mandt = :sy-mandt and a.carrid = :'AA'
endexec.