В языке программирования ABAP / 4 используются два типа SQL.
- НАТИВНЫЙ SQL
- ОТКРЫТЬ SQL.
Собственный 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.