Комментарии по теме

«Ко­рре­кти­ро­вка таблиц базы данных с помощью ABAP»
Олег Точенюк:
Андрей а вам никто никогда не говорил, что обновлять таблицы базы данных SAP категорически запрещено, независимо от того чем обусловлены такие желания. Свои Z-таблицы, да сколько угодно, но......
«Тра­нза­кция SM02: сообщения в SAP системе»
Олег Башкатов:
С помощью ФМ TH_POPUP можно отправить сообщение конкретному пользователю :-)

База знаний

Вы можете подписаться на эту колонки этого автора, если авторизируетесь или зарегистрируетесь

ABAP Managed Database Procedures (AMDP)

17 сентября 2014, 18:17

Введение

Существуют несколько технологий доступа к 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

                                                   bseg.bukrs = docs.bukrs AND

                                                   bseg.belnr = docs.belnr AND

                                                   bseg.gjahr = docs.gjahr

                      WHERE bseg.augbl <> c_space

                      ;

---------------------------------------------------------------------------------

-- обязательно вернуть данные

    e_it_docs = SELECT mandt,

                       bukrs,

                       root_belnr,

                       root_gjahr,

                       belnr,

                       gjahr

                FROM   :lt_full_cleared

                WHERE root_belnr <> belnr

                ;

  ENDMETHOD.

Вызов хранимых процедур в AMDP

AMDP позволяют вызывать в теле класса другие ADMP процедуры.

HANA не поддерживает рекурсивные вызовы хранимых процедур!

Для вызова другой AMDP процедуры, необходимо создать новый ADMP статический метод

CLASS-METHODS: get_clearing_docs IMPORTING VALUE(i_docs) TYPE zcleartab

                                 EXPORTING VALUE(e_docs) TYPE zcleartab.

Объявляем метод в USING

METHOD get_clearing BY DATABASE PROCEDURE FOR HDB

                           LANGUAGE SQLSCRIPT

                           USING zcl_clearing=>get_clearing_docs.                                

Вызываем в ADMP

CALL "ZCL_CLEARING=>GET_CLEARING_DOCS"(

        i_docs => :it_clering,

        e_docs => it_clering1  );

Вызов ADMP в ABAP программе

Вызывается как обычный метод

DATA(clearing) = NEW zcl_clearing(  ).

  clearing->get_clearing( EXPORTING i_it_docs = it_test_docs

                          IMPORTING e_it_docs = DATA(it_out_docs) ).

Представления AMDP на уровне базы данных

Система создает в базе данных хранимую процедуру и внутренние типы данных на основе класса AMDP.

Имя процедуры соответствует имени класса и метода.

Тип данных

Ограничения

для использования AMDP необходимо:

  • Netweaver 7.4 SP5 и выше
  • SAP HANA
  • дополнительная информация в ноте 1899222 - ABAP-managed DB procedures: Technical prerequisites