Відкрити SQL & Native SQL у SAP ABAP
Мета цього підручника – не навчити вас SQL або концепції бази даних, але щоб познайомити вас із різноманіттям SQL у ABAP
У мові програмування ABAP/4 використовуються два типи SQL.
- РІДНИЙ SQL
- ВІДКРИТИЙ SQL.
Open SQL дозволяє отримати доступ до таблиць бази даних, оголошених у словнику ABAP, незалежно від платформи бази даних, яку використовує система R/3.
Власний SQL дозволяє використовувати в програмі ABAP/4 інструкції SQL для бази даних. Це означає, що ви можете використовувати таблиці бази даних, які не адмініструються словником ABAP, і тому інтегрувати дані, які не є частиною системи R/3.
Open SQL складається з набору операторів ABAP, які виконують операції з центральною базою даних у системі R/3. Результати операцій і будь-які повідомлення про помилки не залежать від використовуваної системи бази даних. Таким чином, Open SQL забезпечує єдиний синтаксис і семантику для всіх підтримуваних систем баз даних SAP. Програми ABAP, які використовують лише оператори Open SQL, працюватимуть у будь-якій системі R/3, незалежно від використовуваної системи бази даних. Інструкції Open SQL можуть працювати лише з таблицями бази даних, які були створені в словнику ABAP.
Основні команди Open SQL
- ВИБІР
- INSERT
- ОНОВЛЕННЯ
- ЗМІНИТИ
- DELETE
- ВІДКРИТИ КУРСОР, ОТРИМАННЯ, ЗАКРИТИ КУРСОР
Приклад
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:
Відкрийте коди повернення SQL
Усі оператори Open SQL заповнюють наступні два системні поля кодами повернення.
SY-SUBRC
Після кожного оператора Open SQL системне поле SY-SUBRC містить значення 0, якщо операція була успішною, значення, відмінне від 0, якщо ні.
SY-DBCNT
Після оператора Open SQL системне поле SY-DBCNT містить кількість оброблених рядків бази даних.
Власний 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.
Open SQL – правила продуктивності
Щоб підвищити продуктивність SQL і, у свою чергу, програми ABAP, слід звернути увагу на такі правила:
Тримайте набір результатів малим
- Використання пропозиції where
- Якщо з бази даних потрібен лише один запис, використовуйте SELECT SINGLE, коли це можливо.
Мінімізуйте обсяг переданих даних
- Обмежити кількість рядків
- Якщо з таблиці потрібні лише певні поля, використовуйте SELECT INTO … заява
- Обмежити кількість стовпців
- Використовуйте агрегатні функції
Мінімізуйте кількість передач даних
- Уникайте вкладених циклів вибору
- Альтернативним варіантом є використання оператора SELECT .. FOR ALL ENTRIES. Цей оператор часто може бути набагато ефективнішим, ніж виконання великої кількості операторів SELECT або SELECT SINGLE під час циклу внутрішньої таблиці.
- Використовуйте перегляд словника
- Використовуйте об’єднання в реченні FROM
- Використовуйте підзапити в пропозиції where
Мінімізуйте витрати на пошук
- Використовуйте поля індексу в пропозиції where
- Під час доступу до баз даних завжди переконайтеся, що використовується правильний індекс.
Зменшити навантаження на базу даних
- BufferІНГ
- Логічні бази даних
- Уникайте повторного доступу до бази даних
Використання внутрішніх таблиць для Buffer Records
- Щоб уникнути виконання одного і того ж SELECT кілька разів (і, отже, повторюваних виборів), для підвищення продуктивності можна використовувати внутрішню таблицю типу HASHED.