В статье дается описание ABAP Managed Database Procedures (AMDP) - одной из технологий доступа к HANA из ABAP.

Введение

Существуют несколько технологий доступа к HANA из ABAP:

  • Использование ADBC (ABAP Database Connectivity)
  • External view
  • CALL DATABASE PROCEDURE

К существующим технологиям добавилась AMDP - ABAP Managed Database Procedures.

AMDP позволяют разрабатывать и выполнять хранимые процедуры базы данных напрямую в ABAP.

Использование ADMP

Описание

AMDP можно создать только в глобальных классах.

Класс должен содержать интерфейс IF_AMDP_MARKER_<база данных>.

Все данные в методе передаются по значению, а не по ссылке.

CLASS zcl_clearing DEFINITION  PUBLIC.

  PUBLIC SECTION.

    INTERFACES if_amdp_marker_hdb. – для SAP HANA

Синтаксис метода

METHOD <имя метода> BY DATABASE PROCEDURE FOR <база данных>

                      LANGUAGE <язык БД>

                      [ OPTIONS <опции> ]

                      [ USING <используемые объекты>].

Объявление метода

METHODS: get_clearing IMPORTING VALUE(i_it_docs) TYPE ztt_clear_in

                      EXPORTING VALUE(e_it_docs) TYPE ztt_clear_out.

VALUE – передача параметров по значению

ztt_clear_in, ztt_clear_out – это типы таблиц в словаре

METHOD get_clearing BY DATABASE PROCEDURE FOR HDB

                    LANGUAGE SQLSCRIPT

                    OPTIONS READ-ONLY

                    USING bseg.

HDB – для базы данных SAP HANA

SQLSCRIPT – язык SQL для SAP HANA

READ-ONLY – процедура только для чтения, запрещены операции изменения данных в таблицах (INSERT, UPDATE)

Тело метода

На этом примере мы передаем внутреннюю таблицу в SAP HANA и получаем данные из таблицы BSEG (BSEG уже можно JOIN! она прозрачная на уровне HANA)

Важно не забывать про поле MANDT

METHOD get_clearing BY DATABASE PROCEDURE FOR HDB

                      LANGUAGE SQLSCRIPT

                      OPTIONS READ-ONLY

                      USING bseg.

    DECLARE c_space nvarchar(1) := '';

    -- это комментарий

    -- в данном примере это JOIN таблицы BSEG и внутренней таблицы :i_it_docs

    lt_full_cleared = SELECT bseg.mandt,

                             docs.belnr,

                             docs.gjahr,

                             bseg.shkzg,

                             bseg.bukrs

*                             bseg.rebzg,

*                             bseg.rebzj

                      FROM   bseg AS bseg

                      JOIN   :i_it_docs AS docs ON bseg.mandt = docs.mandt AND

                                                  

Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland

У вас уже есть учетная запись?

Войти