ABAP-04 子程序&INCLUDE程序&SQL

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.
新增到数据库表数据 标准表

在这里插入图片描述

修改

在这里插入图片描述

删除

在这里插入图片描述

哈希

在这里插入图片描述

新增

在这里插入图片描述

修改在这里插入图片描述
删除

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值