Відкрийте SQL & Власний SQL у SAP ABAP

Зміст:

Anonim
Мета цього підручника - не навчити вас поняттям 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, незалежно від використовуваної системи баз даних. Відкриті оператори SQL можуть працювати лише з таблицями баз даних, які були створені у словнику ABAP.

Основні відкриті команди SQL

  • ВИБЕРІТЬ
  • ВСТАВИТИ
  • ОНОВЛЕННЯ
  • ЗМІНИТИ
  • ВИДАЛИТИ
  • ВІДКРИТИ КУРСОР,? FETCH,? ЗАКРИТИ КУРСОР
Приклад
СТОЛИ КНИГИ.КУРСОР ТИПУ ДАНИХ C,БУДЕмо, як книжка.ВІДКРИТИ КУРСОР C ДЛЯ ВИБОРУ * ВІД КНИГИ, ДЕ КАРІД = '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.

Виведіть список пасажирів на рейс авіакомпанії 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 [ВИКОНАННЯ <форма>].<Власна заява SQL>ENDEXEC.
Немає періоду після власних операторів SQL. Крім того, використання перевернутих коми (") або зірочки (*) на початку рядка у власному операторі SQL не вводить коментар, як це було б у звичайному синтаксисі ABAP. Вам потрібно знати, чи назви таблиць та полів є регістровими чутливі у вибраній базі даних.

У власних операторах 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 під час циклу внутрішньої таблиці.
  • Використовуйте словникові подання
  • Використовуйте Joins у реченні FROM
  • Використовуйте підзапити у реченні where
Мінімізуйте накладні витрати на пошук
  • Використовуйте поля індексу в реченні where
  • Під час доступу до баз даних завжди переконайтесь, що використовується правильний індекс.
Зменшіть навантаження на базу даних
  • Буферизація
  • Логічні бази даних
  • Уникайте повторного доступу до бази даних
Використання внутрішніх таблиць для буферизації записів
  • Щоб уникнути виконання одного і того ж SELECT кілька разів (і, отже, мати повторювані виділення), для покращення продуктивності можна використовувати внутрішню таблицю типу HASHED.