Вся 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
Приведено описание синтаксиса и примеры использование.
Присутствует сравнительный анализ инструментариев.
Статья обязательна для изучения программистам 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