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

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

Войти