Открытый SQL и собственный SQL в SAP ABAP

⚡ Умное резюме

Open SQL и нативный SQL в SAP В ABAP описываются два способа взаимодействия программы с базой данных. Open SQL работает с таблицами-словарями независимо от базы данных, в то время как Native SQL передает специфические для базы данных операторы непосредственно на платформу.

  • 🧭 Основное отличие: Open SQL обращается к таблицам, объявленным в словаре ABAP, а Native SQL обращается к таблицам, которые словарь не администрирует.
  • 🧱 Принцип переносимости: Open SQL обеспечивает единый синтаксис, семантику и сообщения об ошибках, поэтому программа работает без изменений на любой поддерживаемой базе данных. SAP.
  • ⌨️ Набор команд: Операторы SELECT, INSERT, UPDATE, MODIFY, DELETE и курсоры охватывают все операции Open SQL с центральной базой данных.
  • 🔢 ВОЗВРАТ Codes: SY-SUBRC сообщает об успешном завершении со значением 0, а SY-DBCNT сообщает количество обработанных строк базы данных.
  • ???? Встроенный SQL-интерфейс: Операторы заключаются между EXEC SQL и ENDEXEC, не имеют точки закрытия и обмениваются данными через переменные хоста, которым предшествует двоеточие.
  • 🚀 Дисциплина исполнительского мастерства: Старайтесь, чтобы результирующий набор был небольшим, ограничивайте поля, избегайте вложенных циклов SELECT, используйте индексированные поля и буферизуйте записи во внутренней таблице с хешированием.

Open SQL и нативный SQL в SAP ABAP

Что такое OpenSQL и Native SQL?

Цель этого урока – не научить вас SQL или концепции баз данных, но чтобы познакомить вас с разнообразием SQL в ABAP.

В языке программирования ABAP/4 используется два типа SQL.

  1. РОДНОЙ SQL
  2. ОТКРЫТЬ SQL.

Open SQL позволяет получить доступ к таблицам базы данных, объявленным в словаре ABAP, независимо от платформы базы данных, которую использует система R/3.

Собственный SQL позволяет использовать операторы SQL, специфичные для базы данных, в программе ABAP/4. Это означает, что вы можете использовать таблицы базы данных, которые не администрируются словарем ABAP, и, следовательно, интегрировать данные, которые не являются частью системы R/3.

Open SQL состоит из набора операторов ABAP, которые выполняют операции с центральной базой данных в системе R/3. Результаты операций и любые сообщения об ошибках не зависят от используемой системы баз данных. Таким образом, Open SQL обеспечивает единый синтаксис и семантику для всех систем баз данных, поддерживаемых SAP. Программы ABAP, использующие только операторы Open SQL, будут работать в любой системе R/3, независимо от используемой системы баз данных. Операторы Open SQL могут работать только с таблицами баз данных, созданными в словаре ABAP.

Open SQL является языком программирования по умолчанию практически в каждой программе, поэтому его набор команд будет рассмотрен в первую очередь.

Основные команды Open SQL

  • ВЫБОР
  • ВСТАВИТЬ
  • ОБНОВЛЕНИЕ ПО
  • ИЗМЕНИТЬ
  • УДАЛИТЬ
  • ОТКРЫТЬ КУРСОР, ВЫБРАТЬ, ЗАКРЫТЬ КУРСОР

Пример

TABLES SBOOK.

DATA C TYPE CURSOR,

WA LIKE SBOOK.

OPEN CURSOR C FOR SELECT * FROM SBOOK WHERE CARRID = 'LH '

AND CONNID = '0400'

AND FLDATE = '19950228'

ORDER BY PRIMARY KEY.

DO.

FETCH NEXT CURSOR C INTO WA.

IF SY-SUBRC <> 0.

CLOSE CURSOR C.

EXIT.

ENDIF.

WRITE: / WA-BOOKID, WA-CUSTOMID, WA-CUSTTYPE,

WA-SMOKER, WA-LUGGWEIGHT, WA-WUNIT,

WA-INVOICE.

ENDDO.

Выведите список пассажиров рейса Lufthansa 0400 28-02.1995:

Результат выполнения каждого из этих утверждений отображается в двух системных полях, описанных далее.

Open SQL Return Codes

Все операторы Open SQL заполняют следующие два системных поля кодами возврата.

Поле системы Смысл
SY-SUBRC После каждого оператора Open SQL системное поле SY-SUBRC содержит значение 0, если операция прошла успешно, и значение, отличное от 0, в противном случае.
SY-DBCNT После оператора Open SQL системное поле SY-DBCNT содержит количество обработанных строк базы данных.

💡 Совет: Всегда проверяйте SY-SUBRC сразу после выполнения оператора. Последующая команда ABAP перезапишет это поле, и исходный результат будет потерян.

Если таблица находится за пределами словаря ABAP, Open SQL не может до неё добраться, и управление переходит к собственному SQL.

Собственный SQL

Как уже упоминалось, Native SQL позволяет использовать операторы SQL, специфичные для базы данных, в ABAP-программа.

Чтобы использовать оператор Native SQL, перед ним необходимо поставить оператор EXEC SQL, а после него — оператор ENDEXEC.

Синтаксис

EXEC SQL [PERFORMING <form>].

  <Native SQL statement>

ENDEXEC.

После операторов Native SQL точка не ставится. Более того, использование кавычек («) или звездочки (*) в начале строки в собственном операторе SQL не вводит комментарий, как в обычном синтаксисе ABAP. Вам необходимо знать, чувствительны ли к регистру имена таблиц и полей в выбранном вами формате. база данных.

В операторах Native SQL данные передаются между таблицей базы данных и программой ABAP с использованием переменных хоста. Они объявлены в программе ABAP, и в инструкции Native SQL им предшествует двоеточие (:). В качестве переменных хоста можно использовать элементарные структуры. В исключительных случаях структуры в предложении INTO обрабатываются так, как будто все их поля перечислены по отдельности.

Как и в Open SQL, после оператора ENDEXEC SY-DBCNT содержит количество обработанных строк. Почти во всех случаях SY-SUBRC содержит значение 0 после оператора ENDEXEC.

⚠️ Предупреждение: Встроенный SQL обходит эту проблему. SAP Буфер таблицы и автоматическая обработка клиента Open SQL. Поле клиента должно быть предоставлено программой, и оператор выполняется только на той платформе базы данных, для которой он был написан.

Open SQL против нативного SQL: ключевые различия

Оба интерфейса обращаются к одной и той же базе данных, однако различаются по переносимости, буферизации и объектам, к которым они могут обращаться. В таблице ниже приведены основные практические различия.

Критерии Открытый SQL Собственный SQL
Таблицы, к которым были обращены Только таблицы, объявленные в словаре ABAP. Любая таблица базы данных, включая таблицы, находящиеся за пределами словаря.
Портативность Работает на всех поддерживаемых базах данных. SAP Привязан к синтаксису одной платформы баз данных.
Синтаксис ABAP-формулы с указанием периода закрытия Операторы SQL, заключенные в блок EXEC SQL … ENDEXEC, без точки закрытия.
передача данных Рабочие зоны и внутренние столы через INTO Переменные хозяина, которым предшествует двоеточие.
Обработка и буферизация данных клиента Автоматическая обработка клиентов и буферизация таблиц. Отсутствует автоматическая обработка клиентов, и SAP буфер пропущен
Типичное использование Ежедневный доступ к данным приложений R/3 Интеграция данных, не являющихся частью системы R/3.

Таким образом, OpenSQL является языком программирования по умолчанию, а приведенные ниже правила обеспечивают его высокую скорость.

Открытый SQL – правила производительности

Чтобы улучшить производительность SQL и, в свою очередь, программы ABAP, следует соблюдать следующие правила:

Держите набор результатов небольшим

  • Использование предложенияwhere
  • Если из базы данных требуется только одна запись, по возможности используйте SELECT SINGLE.

Минимизируйте объем передаваемых данных

  • Ограничить количество строк
  • Если в таблице требуются только определенные поля, используйте SELECT. INTO … заявление
  • Ограничить количество столбцов
  • Используйте агрегатные функции

Минимизируйте количество передач данных

  • Избегайте вложенных циклов выбора
  • Альтернативный вариант — использовать оператор SELECT .. FOR ALL ENTRIES. Этот оператор часто может быть намного более эффективным, чем выполнение большого количества операторов SELECT или SELECT SINGLE во время LOOP внутренней таблицы.
  • Использовать словарные представления
  • Используйте соединения в предложении FROM
  • Используйте подзапросы в предложенииwhere

Минимизируйте затраты на поиск

  • Используйте индексные поля в предложенииwhere
  • При доступе к базам данных всегда проверяйте, используется ли правильный индекс.

Уменьшите нагрузку на базу данных

  • BufferИНГ
  • Логические базы данных
  • Избегайте повторного доступа к базе данных

Использование внутренних таблиц для Buffer документация

  • Чтобы избежать многократного выполнения одного и того же запроса SELECT (и, следовательно, появления дубликатов запросов SELECT), внутренний стол Хэшированные директивы типа HASHED могут использоваться для повышения производительности.

Часто задаваемые вопросы (FAQ)

Обычно нет. Встроенный SQL пропускает этот шаг. SAP Использование буферизации таблиц позволяет выполнять чтение Open SQL с буферизацией, что часто приводит к более высокой скорости. Нативный SQL выигрывает только в тех случаях, когда необходима специфичная для платформы функция, которую Open SQL не предлагает.

Да. Open SQL автоматически добавляет текущего клиента в условие WHERE таблицы, зависящей от клиента. Нативный SQL этого не делает, поэтому программе приходится самостоятельно указывать MANDT, чтобы избежать чтения данных сторонних клиентов.

Вложенный цикл отправляет один запрос к базе данных на каждую запись во внешней таблице, что увеличивает количество сетевых запросов. Объединение таблиц, представление словаря или запрос SELECT … FOR ALL ENTRIES извлекают те же данные за один запрос.

Да. Искусственный интеллект в инструментах разработки ABAP обнаруживает вложенные циклы SELECT, отсутствующие условия WHERE и неиспользуемые столбцы, а затем предлагает переписанный вариант оператора. Предложение по-прежнему требует проверки во время выполнения в транзакции ST05 или SAT.

Сканеры на основе ИИ помечают каждый блок EXEC SQL, объясняют содержащийся в нем синтаксис, специфичный для платформы, и составляют эквивалентный оператор Open SQL. Разработчик проверяет наличие таблиц словаря и тестирует результат перед передачей.

Подведем итог этой публикации следующим образом: