Меню

Настройка соединения и работа с таблицами ORACLE из ABAP с помощью EXEC SQL

|

Задача настоящей статьи - восполнить отсутствующую в других статьях информацию, необходимую для практической реализации доступа к внешним базам данных с помощью EXEC SQL. Вы узнаете, как настраивать соединение с базой данных Oracle, открывать и закрывать соединение, форматировать данные с учетом нужной кодировки. Также будут рассмотрены некоторые операторы EXEC SQL.

Зачастую бывает необходимо обратиться к таблицам во внешних базах данных таких как DB2, Microsoft SQL Server, Oracle и т.д. SAP NetWeaver AS ABAP предлагает  три модели программирования на SQL: Open SQL, ADBC, EXEC SQL.В настоящей статье рассматривается практическая работа с  EXEC SQL. Типичной сферой применения SQL - команд EXEC являются статические SQL-операторы, выполняемые в отношении объектов базы данных, которые не определены в ABAP-словаре, а также SQL-операторы, использующие специальные функции БД, которые не могут быть реализованы посредством Open SQL. Следует помнить, что таблицы базы данных/ракурсы, к которым осуществляется доступ,  в ABAP словаре не описывают.

Более подробно теоретическая часть, посвященная EXEC SQL, изложена в статье Юргена Кисснера (Juergen Kissner) “Организация доступа к удаленной БД и параллельная обработка транзакций в ABAP”. По ADBC есть статья “Вся SQL-функциональность базы данных ABAP Database Connectivity (ADBC)». Авторы Тобиас Веннер и Томас Ропп.

Задача настоящей  статьи - восполнить отсутствующую в вышеуказанных статьях информацию, необходимую для практической реализации доступа к внешним базам данных с помощью EXEC SQL. Вы узнаете, как настраивать соединение с базой данных Oracle, открывать и закрывать соединение, форматировать данные с учетом нужной кодировки. Также будут рассмотрены некоторые операторы EXEC SQL.

1.Настройка соединения с Oracle.

Записи соединений с внешними базами ведутся в таблице DBCON: транзакция DBCO или DBACOCKPIT (Рис.1).

Рис.1 Записи соединений

DBCON-CON_NAME(Соединение БД) – логическое имя соединения с базой данных. Здесь указывается имя соединения, использующееся для вторичных соединений. Например, можно создать соединение с именем ‘ACCOUNT2’ для тестовой системы и соединение ‘ACCOUNT1’ для продуктивной системы.

DBCON-CON_ENV (ИнфоПоСоед) –

здесь указывается TNS имя базы данных, к которой выполняется подключение (формат см. ниже) в настроечном файле TNSNAMES.ORA расположенном на сервере приложений SAP. Данный файл должен содержать такую запись (коннект к тестовой БД TST или продуктивной PPP):

TTT.XXXXX.RU =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = TTTT.PPP.XXXXX.ru)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = PPP)

    )

  )

или(и) коннект к продуктивной БД:

PPP.XXXXX.RU =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = EEEE.DDD.XXXXX.ru )(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = PPP)

    )

  )

Формат записи в поле информация по соединению (DBCON-CON_ENV) - следующий:

PPP.XXXXX.RU:CL8MSWIN1251:CL8MSWIN1251

где PPP.XXXXX.RU - имя в TNSNAMES.ORA

:CL8MSWIN1251:            - имя кодовой страницы внешнего сервера Oracle для VARCHAR

:CL8MSWIN1251             - имя кодовой страницы внешнего сервера Oracle для NVARCHAR

(см. ноту SAP 808505)

DBCON-USER_NAME (DBCON-PASSWORD) (в dbcon прописываются пользователь и пароль).

DBCON-DB_RECO (Постоянный) – установка этого флага влияет на то, что происходит,  когда теряется открытое соединение с БД из-за сбоя БД или сети. Вы должны установить флажок, если подключение к базе данных является важным, или тогда, когда оно осуществляется очень часто.

Важно: на сервере в хостах необходимо указать IP адрес внешнего сервера ORACLE, иначе работать соединение не будет.

2.Форматирование данных.

Клиент SAP/R3 имеет кодовую страницу ISO 8859-5 Latin/Cyrillic, которая в ORACLE представлена значением CL8ISO8859P5 (документация по Oracle 9x Globalization Support Guide - a96529.pdf). Для правильной записи символов русского текста необходимо сконвертировать значение из кодировки ISO в кодировку внешнего сервера Oracle - CL8MSWIN1251. Перекодировка производится с помощью функции Oracle - CONVERT.

Даты в SAP/R3 представлены в виде текстовых полей. Для успешной записи их в таблицы Oracle их необходимо также сконвертировать функцией TO_DATE.

3.Некоторые примеры кода.

3.0 Определения для нашего примера.

DATA:   GR_ORAERR TYPE REF TO CX_SY_NATIVE_SQL_ERROR,
        BEGIN OF GT_ERR OCCURS 0,
          CODEERR(9),
          STEXT(100),
        END OF GT_ERR.

CONSTANTS:
  C_ER01(9)        VALUE 'SAP-00001', "Ошибка соединения из SAP
  C_ORACHARSET(12) VALUE 'CL8MSWIN1251',
  C_SAPCHARSET(12) VALUE 'CL8ISO8859P5'.

3.1 Регистрация ошибок.

Регистрацию ошибок можно разделить на две части: одна часть - регистрация ошибок на стороне БД Oracle, а другая – на стороне SAP.  Ошибки на стороне Oracle можно «ловить» с помощью специального класса предназначенного для анализа обрабатываемых исключений CX_SY_NATIVE_SQL_ERROR. Более подробно об исключениях можно почитать в официальной документации: http://help.sap.com/abapdocu_740/en/abenabap_exceptions.htm. Если сообщений от базы данных не определено, это означает наличие  исключительной ситуации на стороне SAP.

*Ошибки Oracle
FORM FILL_ORA_ERR.
  GT_ERR-CODEERR = GR_ORAERR->SQLMSG(9).
  GT_ERR-STEXT   = GR_ORAERR->SQLMSG+10.
  APPEND GT_ERR.
ENDFORM.

*Ошибки SAP
FORM FILL_SAP_ERR.
  GT_ERR-CODEERR = C_ER01.

  GT_ERR-STEXT   = 'Ошибка соединения из SAP'.
  APPEND GT_ERR.
ENDFORM.

3.2 Формирование соединения.

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

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

Войти