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

⚡ Розумний підсумок

Відкритий SQL та рідний SQL у SAP ABAP описує два способи, якими програма ABAP звертається до бази даних. Відкритий SQL працює з таблицями словника незалежно від бази даних, тоді як Native SQL передає специфічні для бази даних оператори безпосередньо на платформу.

  • 🧭 Основна відмінність: Відкриті таблиці адрес SQL, оголошені у словнику ABAP, та таблиці адрес Native SQL, які не адмініструються словником.
  • 🧱 Принцип портативності: Відкритий SQL забезпечує єдиний синтаксис, семантику та повідомлення про помилки, тому програма працює без змін на кожній базі даних, що підтримується SAP.
  • ⌨️ Набір команд: Оператори SELECT, INSERT, UPDATE, MODIFY, DELETE та курсор охоплюють кожну операцію Open SQL у центральній базі даних.
  • 🔢 Повернення Codes: SY-SUBRC повідомляє про успіх зі значенням 0, а SY-DBCNT повідомляє про кількість оброблених рядків бази даних.
  • 🔌 Рідний інтерфейс SQL: Оператори вкладаються між EXEC SQL та ENDEXEC, не мають завершальної крапки та обмінюються даними через змінні хоста, яким передує двокрапка.
  • ???? Дисципліна виконання: Зберігайте невеликий результуючий набір, обмежуйте поля, уникайте вкладених циклів SELECT, використовуйте індексні поля та буферизуйте записи у внутрішній таблиці HASHED.

Відкритий SQL та рідний SQL у SAP ABAP

Що таке відкритий SQL та нативний SQL?

Мета цього підручника – не навчити вас 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.

Відкритий SQL є вибором за замовчуванням майже в кожній програмі, тому його набір команд розглядається першим.

Основні команди 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 Return Codes

Усі оператори Open SQL заповнюють наступні два системні поля кодами повернення.

Системне поле Сенс
SY-SUBRC Після кожного оператора Open SQL системне поле SY-SUBRC містить значення 0, якщо операція була успішною, значення, відмінне від 0, якщо ні.
SY-DBCNT Після оператора Open SQL системне поле SY-DBCNT містить кількість оброблених рядків бази даних.

💡 Порада: Завжди перевіряйте SY-SUBRC одразу після виконання оператора. Пізніша команда ABAP перезаписує поле, і початковий результат втрачається.

Коли таблиця знаходиться поза межами словника ABAP, Open SQL не може до неї дістатися, і натомість використовується Native SQL.

Власний 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.

⚠️ Попередження: Рідний SQL обходить SAP буфер таблиці та автоматична обробка клієнтом Open SQL. Поле клієнта має бути надано програмою, а оператор виконується лише на платформі бази даних, для якої його було написано.

Відкритий SQL проти нативного SQL: ключові відмінності

Обидва інтерфейси звертаються до однієї бази даних, проте вони відрізняються переносимістю, буферизацією та об'єктами, до яких вони можуть звертатися. У таблиці нижче підсумовано практичні відмінності.

Критерії Відкрити SQL Власний SQL
Адресовані таблиці Тільки таблиці, оголошені у словнику ABAP Будь-яка таблиця бази даних, включаючи таблиці поза словником
Портативність Працює на кожній базі даних, що підтримується SAP Прив'язаний до синтаксису однієї платформи баз даних
синтаксис Звіти ABAP з періодом закриття Нативні оператори, укладені в EXEC SQL … ENDEXEC, без закриваючої крапки
Передача даних Робочі області та внутрішні столи через INTO Змінні хоста, яким передує двокрапка
Обробка та буферизація клієнтів Автоматична обробка клієнтів та буферизація таблиць Немає автоматичної обробки клієнтів, і SAP буфер обійдено
Типове використання Щоденний доступ до даних застосунку R/3 Інтеграція даних, які не є частиною системи R/3

Таким чином, відкритий SQL використовується за замовчуванням, а наведені нижче правила забезпечують його швидкість.

Open SQL – правила продуктивності

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

Тримайте набір результатів малим

  • Використання пропозиції where
  • Якщо з бази даних потрібен лише один запис, використовуйте SELECT SINGLE, коли це можливо.

Мінімізуйте обсяг переданих даних

  • Обмежити кількість рядків
  • Якщо з таблиці потрібні лише певні поля, використовуйте SELECT INTO … заява
  • Обмежити кількість стовпців
  • Використовуйте агрегатні функції

Мінімізуйте кількість передач даних

  • Уникайте вкладених циклів вибору
  • Альтернативним варіантом є використання оператора SELECT .. FOR ALL ENTRIES. Цей оператор часто може бути набагато ефективнішим, ніж виконання великої кількості операторів SELECT або SELECT SINGLE під час циклу внутрішньої таблиці.
  • Використовуйте перегляд словника
  • Використовуйте об’єднання в реченні FROM
  • Використовуйте підзапити в пропозиції where

Мінімізуйте витрати на пошук

  • Використовуйте поля індексу в пропозиції where
  • Під час доступу до баз даних завжди переконайтеся, що використовується правильний індекс.

Зменшити навантаження на базу даних

  • BufferІНГ
  • Логічні бази даних
  • Уникайте повторного доступу до бази даних

Використання внутрішніх таблиць для Buffer Records

  • Щоб уникнути багаторазового виконання одного й того ж SELECT (і, отже, дублювання вибраних варіантів), внутрішній стіл типу HASHED можна використовувати для покращення продуктивності.

Поширені запитання

Зазвичай ні. Рідний SQL пропускає SAP буфер таблиці, тому буферизоване читання Open SQL часто відбувається швидше. Native SQL перемагає лише тоді, коли потрібна специфічна для платформи функція, якої Open SQL не пропонує.

Так. Відкритий SQL автоматично додає поточного клієнта до речення WHERE таблиці, залежної від клієнта. Нативний SQL цього не робить, тому програма повинна сама надавати MANDT, щоб уникнути зчитування даних стороннього клієнта.

Вкладений цикл надсилає один виклик бази даних на кожен запис зовнішньої таблиці, що множить кількість циклів обробки даних у мережі. Об'єднання, словниковий перегляд або SELECT … FOR ALL ENTRIES отримує ті самі дані за один виклик.

Так. Помічники штучного інтелекту в інструментах розробки ABAP виявляють вкладені цикли SELECT, відсутні умови WHERE та невикористані стовпці, а потім пропонують переписаний оператор. Пропозиція все ще потребує перевірки під час виконання в транзакції ST05 або SAT.

Сканери ШІ позначають кожен блок EXEC SQL, пояснюють синтаксис, специфічний для платформи, всередині нього та складають еквівалентний оператор Open SQL. Розробник підтверджує існування таблиць словника та тестує результат перед передачею.

Підсумуйте цей пост за допомогою: