Відкрити SQL & Native SQL у SAP ABAP

Мета цього підручника – не навчити вас SQL або концепції бази даних, але щоб познайомити вас із різноманіттям SQL у ABAP

У мові програмування ABAP/4 використовуються два типи SQL.

  1. РІДНИЙ SQL
  2. ВІДКРИТИЙ 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.