Меню

Вся SQL-функциональность базы данных благодаря ABAP Database Connectivity (ADBC)

|

SQL-оператор EXEC позволяет разработчикам выполнять команды SQL, ограниченные одной базой данных и не представленные в функциональности Open SQL. Таким образом, они могут обращаться к таблицам БД, не входящим в ABAP-словарь. Однако на практике имеется ряд ограничений, поскольку такой подход позволяет выполнять только статичные SQL-операторы, снижает возможность обработки ошибок и допускает возникновение проблем в случае многочисленных подключений к базам данных. Интерфейс ABAP Database Connectivity (ADBC) был разработан как дополнение к EXEC SQL и представляет собой объектно-ориентированный API уровня вызовов, устраняющий эти ограничения и обеспечивающий доступ Native SQL ко всем функциональным возможностям SQL базы данных. В этой статье представлено введение в ADBC и примеры его применения.

ЧтNj такое ADBC? Эта аббревиатура очень похожа на JDBC (Java Database Connectivity) – известную модель программирования на SQL в мире Java. И действительно, сходство двух аббревиатур неслучайно. ADBC расшифровывается как ABAP Database Connectivity – название объектно-ориентированного API на ABAP, предназначенного для программирования доступа к реляционным базам данных, который в своей структуре классов и методов повторяет стиль JDBC, но, несмотря на это, ни в коей мере не является внедрением ABAP интерфейса JDBC (это будет описано далее). В структуре этих языков существует множество различий.

Означает ли это, что разработчики ABAP не удовлетворены доступными моделями программирования баз данных и нуждаются в более гибкой альтернативе – например, средстве, аналогичном JDBC? Однозначно нет! Для большинства разработчиков приложений АBAP Open SQL остается и будет оставаться излюбленной моделью программирования на SQL. Основным преимуществом языка ABAP является гибкая и тесная интеграция процесса доступа к базе данных через Open SQL, обеспечивающая оптимальную производительность, независимость от платформы и проверку синтаксиса на этапе компиляции. Так почему же возникла необходимость в альтернативном API SQL?

ADBC был разработан как дополнение к функциональным возможностям ABAP Native SQL, реализованным в SQL-команде EXEC. SQL-оператор EXEC позволяет разработчикам выполнять команды SQL, ограниченные одной базой данных и не представленные в функциональности Open SQL. Они могут обращаться к таблицам БД, которые не зависят от ABAPсловаря, что дает возможность адресации данных, созданных вне SAP NetWeaver Application Server (AS). Однако в некоторых случаях недостатки и принципиальные недоработки в SQL-операторе EXEC ограничивают сферу его применения:

  • В SQL-операторе EXEC поддерживаются только статические SQL-операторы. Это означает, что он не может использоваться для решения определенного класса задач, требующих средств динамического SQL, таких как родовые запросы1. Конечно, в таких ситуациях всегда можно прибегнуть к динамическому созданию и исполнению ABAP-программы, однако это достаточно сложно с точки зрения программирования и неэффективно с точки зрения исполнения.
  • Недостаточно гибкая обработка ошибок. Если по какой-либо причине выполнение SQL-оператора завершается неуспешно, текущая прикладная транзакция в исполняющей системе ABAP прерывается, в результате чего программа возвращает ошибку. Однако в некоторых случаях после возникновения ошибки SQL можно передать дальнейшее управление процессом прикладной программе. Эта программа, например, может анализировать возвращенный код SQL и предпринимать различные действия в зависимости от результатов анализа.
  • Наличие множественных подключений к БД чревато ошибками и требует жесткой программистской дисциплины. Причина состоит в том, что SQL-операторы выполняются в контексте глобального подключения, а не отдельных объектов подключения, которые могут передаваться в качестве параметров между модулями программы. Для этой ситуации характерны те же виды ошибок и неприятных неожиданностей, которые возникают при использовании глобальных переменных программы.

Оформите подписку sappro и получите полный доступ к материалам SAPPRO

У вас уже есть подписка?

Войти

Обсуждения Количество комментариев3

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

Евгений Спицин

  |  08 июля 2010, 08:10

В статье дан качественный обзор функциональности доступа к данным ADBC.
Приведено описание синтаксиса и примеры использование.
Присутствует сравнительный анализ  инструментариев.
Статья обязательна для изучения программистам ABAP.

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

Александр Биличенко

  |  23 июля 2010, 02:08

Помоему тут полно ошибок в примерах текстов программ
Например:
rows_processed = stmt_obj-> execute_update (insert into SFLIGHT` ` ( && (CARRID, CONNID, FLDATE, PRICE, CURRENCY)` ` &&  `values (\'LH\', \'400\', \'20070719\', \'666.00\', \'EUR\')
 
кол-во открывающих скобок больше чем закрывающих
 
далее
* Подготовка оператора INSERT
prep_stmt_obj = con_obj-> prepare_statement (`insert into SFLIGHT`  && ` (CARRID, CONNID, FLDATE, PRICE, CURRENCY) `  && ` values (?, ?, ?, ?, ?) `).
 
* Привязка входных переменных к каждой из меток-заполнителей в SQL-операторе
GET REFERENCE OF carrid INTO ref.
prep_stmt_obj->set_param( ref ).
GET REFERENCE OF connid INTO ref.
prep_stmt_obj->set_param( ref ).
GET REFERENCE OF flight_date INTO ref.
 
префикс set* обычно означает установку какого-то значения
в тексте выше вызов содержит один и тотже метод с различной ссылкой на переменную
было бы понятнее если бы выполнялся метод add*
 
и так далее по тексту
 
у меня нет возможноси проверить корректности/некорректность приведенных примеров, рассуждения только на уровне логики

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

Александр Насонов

  |  23 июля 2010, 17:02

Хотелось бы понять - насколько эффективен по быстродействию этот метод доступа к внешним БД.  Например, имеет ли смысл использовать метод для массовой загрузки данных в SAP-системы из внешних систем (для наиболее популярных СУБД).