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

Содержание:

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

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

  1. НАТИВНЫЙ SQL
  2. ОТКРЫТЬ SQL.
Открытый SQL позволяет получить доступ к таблицам базы данных, объявленным в словаре ABAP, независимо от платформы базы данных, которую использует система R / 3.

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

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

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

  • ВЫБРАТЬ
  • ВСТАВЛЯТЬ
  • ОБНОВИТЬ
  • ИЗМЕНИТЬ
  • УДАЛИТЬ
  • ОТКРЫТЬ КУРСОР,? ВЫБРАТЬ,? ЗАКРЫТЬ КУРСОР
Пример
ТАБЛИЦЫ SBOOK.КУРСОР ТИПА ДАННЫХ C,БЫЛО НРАВИТСЯ SBOOK.ОТКРЫТЬ КУРСОР C ДЛЯ ВЫБРАТЬ * ИЗ SBOOK, ГДЕ CARRID = 'LH'И КОННИД = '0400'И FLDATE = '19950228'ЗАКАЗ ПО ПЕРВИЧНОМУ КЛЮЧУ.ДЕЛАТЬ.ПОИСК СЛЕДУЮЩЕГО КУРСОРА C В WA.ЕСЛИ SY-SUBRC <> 0.ЗАКРЫТЬ КУРСОР C.ВЫХОД.ENDIF.НАПИСАТЬ: / WA-BOOKID, WA-CUSTOMID, WA-CUSTTYPE,WA-SMOKER, WA-LUGGWEIGHT, WA-WUNIT,WA-СЧЕТ.ENDDO.

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

Коды возврата Open SQL

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

SY-SUBRC

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

SY-DBCNT

После оператора Open SQL системное поле SY-DBCNT содержит количество обработанных строк базы данных.

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

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

Чтобы использовать собственный оператор SQL, вы должны предварять его оператором EXEC SQL, а после него - оператором ENDEXEC.

Синтаксис

EXEC SQL [ВЫПОЛНЕНИЕ <форма>].<Собственный оператор SQL>ENDEXEC.
После операторов Native SQL точка не ставится. Кроме того, использование кавычек (") или звездочки (*) в начале строки в собственном операторе SQL не приводит к появлению комментария, как это было бы в обычном синтаксисе ABAP. Вам необходимо знать, являются ли имена таблиц и полей регистром". чувствительный в выбранной вами базе данных.

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

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

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

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

Сохраняйте небольшой набор результатов

  • Использование предложения where
  • Если из базы данных требуется только одна запись, по возможности используйте SELECT SINGLE.
Минимизируйте объем передаваемых данных
  • Ограничить количество строк
  • Если из таблицы требуются только определенные поля, используйте оператор SELECT INTO…
  • Ограничить количество столбцов
  • Использовать агрегатные функции
Сведите к минимуму количество передач данных
  • Избегайте вложенных циклов выбора
  • Альтернативный вариант - использовать оператор SELECT… FOR ALL ENTRIES. Этот оператор часто может быть намного более эффективным, чем выполнение большого количества операторов SELECT или SELECT SINGLE во время цикла внутренней таблицы.
  • Использовать просмотры словаря
  • Используйте объединения в предложении FROM
  • Используйте подзапросы в предложении where
Минимизируйте накладные расходы на поиск
  • Используйте поля индекса в предложении where
  • При доступе к базам данных всегда проверяйте, что используется правильный индекс.
Уменьшите нагрузку на базу данных
  • Буферизация
  • Логические базы данных
  • Избегайте повторного доступа к базе данных
Использование внутренних таблиц для буферизации записей
  • Чтобы избежать выполнения одного и того же SELECT несколько раз (и, следовательно, иметь повторяющиеся выборки), для повышения производительности можно использовать внутреннюю таблицу типа HASHED.