Настройка соединения и работа с таблицами 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
ЗарегистрироватьсяУ вас уже есть учетная запись?
Войти