Збережена процедура в SAP HANA (підручник з SQL)

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

SAP Збережена процедура HANA SQL — це багаторазовий іменований блок SQLScript, який виконує певну операцію з даними. Він приймає параметри IN, OUT та INOUT, може бути позначений як «лише для читання» за допомогою READS SQL DATA та створюється на рівні схеми або пакета за допомогою синтаксису CREATE PROCEDURE.

  • 🧱 Виберіть місце для створення: Визначте процедури на рівні схеми (каталогу) або пакета (контенту) залежно від їхнього місця в SAP Модель даних HANA.
  • 📥 Використовуйте параметри навмисно: IN передає вхідні дані, OUT повертає вихідні дані, INOUT виконує обидва функції — назвіть їх для ясності в кожному підписі.
  • 🔐 Ретельно обирайте БЕЗПЕКУ SQL: DEFINER працює з привілеями творця; INVOKER працює з привілеями викликаючої сторони — вибір базується на політиці доступу до даних.
  • 📚 Позначте лише для читання, коли це можливо: ЗЧИТАЄ ДАНІ SQL, документує наміри, оптимізує планування та дозволяє відображати процедуру через результат.
  • 🤖 Використовуйте штучний інтелект для розробки процедур: Помічники штучного інтелекту перетворюють логіку простою англійською мовою на шаблони CREATE PROCEDURE з параметрами, обробниками винятків та представленнями результатів.

SAP Збережена процедура HANA SQL

Що таке збережена процедура SQL?

A збережена процедура — це іменована, повторно використовувана одиниця коду, яка виконує певне завдання. Процедури можна об'єднувати в більші програми, що є основою Модульний дизайнОдна процедура може викликати іншу — той, хто викликає, називається виклик програми.

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

An SQL процедура в SAP ХАНА можна створити за адресою:

  • Рівень схеми (Вузол каталогу) — керується через каталог і видимий для кожного споживача з відповідними привілеями.
  • Рівень пакету (Вузол контенту) — керується як артефакт часу розробки всередині пакета програми.

SAP Синтаксис збережених процедур HANA

Загальний синтаксис для створення процедури в SAP HANA показано нижче.

CREATE PROCEDURE <proc_name> [(<parameter_clause>)] [LANGUAGE <lang>]
    [SQL SECURITY <mode>] [DEFAULT SCHEMA <default_schema_name>]
    [READS SQL DATA [WITH RESULT VIEW <view_name>]] AS
    { BEGIN [SEQUENTIAL EXECUTION]
        <procedure_body>
      END
    | HEADER ONLY }

Команда CREATE PROCEDURE оператор створює процедуру, використовуючи мову програмування, визначену параметром <lang>Мова за замовчуванням — SQLScript.

Пояснення синтаксичних елементів

У таблиці нижче описано кожен пункт, що використовується в синтаксисі CREATE PROCEDURE.

Елемент Опис
<proc_name> Назва процедури.
<parameter_clause> Список параметрів, кожен з яких позначено як IN, OUT або INOUT:
• IN — вхідні дані лише для читання, що передаються процедурі.
• OUT — результат, повернутий процедурою.
• ВХІД/ВИХІД — передає значення та повертає змінене значення.
LANGUAGE <lang> Мова програмування, що використовується в процедурі. За замовчуванням: SQLSCRIPT.
SQL SECURITY <mode> Режим безпеки (за замовчуванням: ВИЗНАЧАЛЬНИК):
• ВИЗНАЧАЛЬНИК — виконується з привілеями автора процедури.
• ВИКЛИКАЧ — виконується з привілеями викликаючої сторони.
DEFAULT SCHEMA <default_schema_name> Схема, що використовується для розв'язання некваліфікованих об'єктів у тілі процедури. Якщо пропущено, використовується схема поточного сеансу.
READS SQL DATA Позначає процедуру як процедуру лише для читання. Вона не може змінювати дані або схему, не містить DDL або DML і може викликати лише інші процедури лише для читання.
WITH RESULT VIEW <view_name> Визначає результатний вигляд, який використовується як вивід процедури. Коли результатний вигляд присутній, процедура може бути запитувана іншим SQL оператор так, ніби це таблиця або представлення.
SEQUENTIAL EXECUTION Примушує тіло процедури виконуватися послідовно без паралелізму.
<procedure_body> Основна частина процедури, написана обраною мовою програмування.
HEADER ONLY Створює лише властивості процедури з OID, без компіляції тіла. Корисно для прямих оголошень.

Приклад: Створення простої збереженої процедури

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

CREATE PROCEDURE GET_CUSTOMER_SALES (
    IN  iv_customer_id NVARCHAR(10),
    OUT ev_total       DECIMAL(15,2)
)
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER
READS SQL DATA AS
BEGIN
    SELECT SUM(NET_VALUE) INTO ev_total
    FROM   "SALES"."ORDERS"
    WHERE  CUSTOMER_ID = :iv_customer_id;
END;

Викличте процедуру за допомогою:

CALL GET_CUSTOMER_SALES ('C0001', ?);

SAP HANA Studio (або будь-який клієнт JDBC/ODBC) повертає значення ev_total у вихідному параметрі.

Виклик збереженої процедури

Після створення збережена процедура викликається через CALL оператор, необов'язково всередині іншої процедури, функції SQLScript або зовнішнього клієнта. Чотири найпоширеніші шаблони виклику:

  • З SQL: CALL my_proc(p1, p2, ?); — заповнювачі повертають значення OUT.
  • З іншої процедури: CALL another_proc(:in1, :out1);
  • З програми: прив’язувати вхідні параметри та зчитувати вивід через JDBC, ODBC або Cloud SDK.
  • Як віртуальний стіл: Коли оголошується результатний вигляд, запитуйте процедуру за допомогою SELECT щодо імені вигляду.

Найкращі практики для збережених процедур HANA

Наведені нижче звички забезпечують зрозумілість, ефективність та легкість обслуговування процедур HANA:

  • Назвіть параметри з префіксами: iv_ для введення, ev_ на експорт, та iov_ для вводу/виводу.
  • Позначте намір за допомогою READS SQL DATA скрізь, де процедура дійсно доступна лише для читання.
  • Використання SQL SECURITY INVOKER для спільних процедур, які повинні поважати привілеї абонента.
  • Оберніть кожен блок у BEGIN/END і зробіть тіло коротким — розділіть важку логіку на допоміжні процедури.
  • Обробка винятків: використання DECLARE EXIT HANDLER для коректного повідомлення про помилки.
  • Уникайте SELECT * всередині процедур — назвіть стовпці, які вам насправді потрібні, щоб плани залишалися стабільними.

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

Процедура може мати кілька параметрів OUT, може видавати DML та викликається за допомогою CALL. Функція повертає одне скалярне або табличне значення, виконується без побічних ефектів та використовується всередині SELECT, WHERE або інших виразів.

Мовою програмування за замовчуванням і найпоширенішою є SQLScript. HANA також підтримує R для процедур, які потребують статистичних бібліотек, та L для низькорівневих сценаріїв. SQLScript – це правильний вибір майже для кожної бізнес-процедури.

DEFINER запускає процедуру з привілеями користувача, який її створив, що корисно, коли процедура повинна отримувати доступ до таблиць, які викликаюча сторона не може бачити безпосередньо. INVOKER запускається з привілеями викликаючої сторони, що безпечніше для спільних утилітних процедур.

Використовуйте READS SQL DATA щоразу, коли процедура лише читає дані, а не записує їх. Це документує намір, дозволяє переглядати результати та дозволяє оптимізатору планувати процедуру більш агресивно.

Використайте оператор CALL: CALL proc_name (in_val, out_param);З програми прив’язуйте вхідні та вихідні дані через драйвер JDBC, ODBC або Cloud SDK, або надавайте доступ до процедури через OData для клієнтів REST.

Видалити процедуру за допомогою DROP PROCEDURE proc_name; та відтворіть його за допомогою процедури CREATE OR REPLACE. SAP HANA не підтримує процедуру ALTER; стандартний шаблон — CREATE OR REPLACE.

Помічники ШІ генерують шаблони CREATE PROCEDURE, пропонують назви параметрів, пишуть обробники винятків та перетворюють логіку простою англійською мовою на SQLScript. Вони також вказують на відсутні кваліфікації схеми та ризиковані DML у контекстах лише для читання.

Так. Інструменти штучного інтелекту анотують SQLScript рядок за рядком — пояснюючи, що робить кожен параметр, чому було обрано певне з’єднання та де процедура може завершитися невдачею через неправильні вхідні дані — що значно пришвидшує перевірку коду та адаптацію.

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