AMDP 在BW转换里的应用

4 篇文章 2 订阅
1 篇文章 1 订阅

原先例程用ABAP写,用的是ABAP运行环境在ABAP层。

现在用AMDP写,是要在HANA runtime,把代码下推到数据库层处理,理论上来讲会快很多。

那么问题就来了,有没有必要把转换的routine用AMDP写?结论是大多数情况下没必要,没什么用。

因为当我们用ODP的extractor的时候,因为ODP抽取和转换都是在ABAP环境运行,这时候,肯定是直接写ABAP代码更好了,都在一层处理。没必要再去写一个在AMDP类里实现的方法,再把数据拖到数据库层处理。除非有特殊的复杂逻辑,ABAP搞不定的,才用AMDP写。

咱就只来看看AMDP在转换里是怎么写的:

首先会看到AMDP的类,还有方法里的变量:

有三个重要的:

1. inTab: 就是存income数据的内表

2. outTab:就是存output数据的内表

3. errorTab: 包含错误记录的表。

下面来看两个简单的例子:

1. 字段例程

字段例程的方法是系统自己生成的。

METHOD S0001_G01_R3 BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY.
-- target field: 0LOGSYS
-- *** Begin of routine - insert your code only below this line ***

-- Note the _M class are not considered for DTP execution.
-- AMDP Breakpoints must be set in the _A class instead.

outTab = SELECT
case
when LOGSYS = '999' then '100'
else LOGSYS
end as LOGSYS,
RECORD,
SQL__PROCEDURE__SOURCE__RECORD
FROM :inTab
;

-- Allow Error Handling for HANA Routines is enabled

ERRORTAB = SELECT '' AS ERROR_TEXT, '' AS SQL__PROCEDURE__SOURCE__RECORD FROM DUMMY WHERE DUMMY <> 'X';

-- *** End of routine - insert your code only before this line ***
ENDMETHOD.

2. 结束例程

结束例程在方法 procedure里面写。

ABAP代码:

*********** Start Transformation**********************************

       SELECT MATERIAL PLANT NET_PRICE GROSS_PRICE /BIC/VALID_DATE
        FROM
      /BIC/APLB12
        INTO CORRESPONDING FIELDS OF TABLE LT_PLB FOR ALL ENTRIES IN
        RESULT_PACKAGE
        WHERE MATERIAL = RESULT_PACKAGE-/BIC/ZMATERIAL
              AND PLANT = RESULT_PACKAGE-PLANT.

LOOP at RESULT_PACKAGE ASSIGNING <result_fields>.


********* Start Polulate Data in Result ADSO************************

        READ TABLE LT_PLB INTO WA_PLB
              WITH KEY MATERIAL = <result_fields>-/BIC/ZMATERIAL
                       PLANT = <result_fields>-PLANT.

		  IF sy-subrc = 0.
			 <result_fields>-/BIC/TOTAL PRICE = WA_PLB-GROSS_PRICE + WA_PLB-NET_PRICE.
			 
		  ENDIF.	  

********* End Polulate Data in Result ADSO***************************

AMDP 代码:

********* Start AMDP Script *****************************************

OUTTAB = SELECT 
			"/BIC/POORDER",
			"/BIC/ORDER_LINE",
			"/BIC/SCHEDULE_LINE",
			"/BIC/CREATION_DATE",
			"/BIC/ZMATERIAL",
			"/BIC/0PLANT",
			"/BIC/TOTAL_PRICE",
			CURRENCY,
			SQL_PROCEDURE_SOURCE_RECORD
			FROM 
			(SELECT 
				P1."/BIC/POORDER",
				P1."/BIC/ORDER_LINE",
			    P1."/BIC/SCHEDULE_LINE",
			    P1."/BIC/CREATION_DATE",
			    P1."/BIC/ZMATERIAL",
				P1."/BIC/0PLANT",
			    (P2.GROSS_PRICE + P2.NET_PRICE) AS "/BIC/TOTAL_PRICE",
				CURRENCY,
				P1.SQL_PROCEDURE_SOURCE_RECORD
				FROM : TEMP_TABLE P1 LEFT OUTER JOIN "/BIC/APLB12" P2 ON P1."/BIC/ZMATERIAL" = P2.MATERIAL 
                       AND P1."/BIC/0PLANT" = P2.PLANT);
					   
********** END OF AMDP SCRIPT ***************************************

 AMDP的常用语法及错误:下一篇

如何Debug AMDP:下下篇

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaomici

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值