Подключение к внешней БД на языке ABAP

В проекте потребовалось использовать подключение к внешней базе данных расположенной в сети предприятия, в качестве СУБД используется MS SQL. Далее опишу достаточно простое решение, которое легло в основу решения. Пример будет весьма примитивным :)

Предпосылки

  1. На сервере приложений должно быть установлено ПО Microsoft SQL Server 2008 R2 Native Client (версия зависит от версии СУБД).
  2. В папке согласно параметру DIR_CT_RUN должна присутствовать библиотека dbmssslib.dll.
Подробнее требования описаны в ноте 1774329

Последовательность


1. Настройка соединения с БД
Соединение настраивается с помощью транзакции DBCO. Ниже приведен скриншот:




2. После того как соединение настроено, тестируем его с помощью программы ADBC_TEST_CONNECTION через SE38.

3. Все, теперь можно писать вашу программу и подключаться к указанной базе данных.

REPORT  ZMSSQL.

DATA: c       TYPE cursor,
      dbs     TYPE dbcon-con_name VALUE 'SQL001',
      dbtype  TYPE dbcon_dbms,
      lv_acct_name TYPE char100.

TRY.
  EXEC SQL.
    CONNECT TO :dbs
  ENDEXEC.
  IF sy-subrc <> 0.
    RAISE EXCEPTION TYPE cx_sy_native_sql_error.
  ENDIF.

  EXEC SQL.
    OPEN dbcursor FOR
      SELECT acct_name FROM ACCOUNT
  ENDEXEC.

  DO.
    EXEC SQL.
      FETCH NEXT dbcursor INTO :lv_acct_name
    ENDEXEC.
    IF sy-subrc <> 0.
      EXIT.
    ELSE.
      WRITE / lv_acct_name.
    ENDIF.
  ENDDO.

  EXEC SQL.
    CLOSE dbcursor
  ENDEXEC.
  EXEC SQL.
    DISCONNECT :dbs
  ENDEXEC.

CATCH cx_sy_native_sql_error.
  MESSAGE `Error in Native SQL.` TYPE 'I'.
ENDTRY.

П.С. Чтобы было правильно воспринято, данное решение не является рекомендуемым к применению на проектах, правильнее все же использовать другие решения: корпоративные шины данных, сервисы и т.д. Но, в качестве временной заплатки, для решения локальной задачи вполне подойдет и это :)

1 комментарий:

  1. Забыли сказать, что ваш рецепт только для систем, которые на Windows cерверах !
    Для Линукса своя нота 1644499
    А вот для Unix платформ чтото решений(нот) я не нашёл...

    ОтветитьУдалить