Хранимая процедура в SAP HANA (Учебное пособие по SQL)
⚡ Умное резюме
SAP Хранимая процедура HANA SQL — это многократно используемый именованный блок SQLScript, выполняющий определенную операцию с данными. Она принимает параметры IN, OUT и INOUT, может быть помечена как доступная только для чтения с помощью команды READS SQL DATA и создается на уровне схемы или пакета с использованием синтаксиса CREATE PROCEDURE.

Что такое хранимая процедура SQL?
A хранимая процедура Процедуры — это именованные, многократно используемые блоки кода, выполняющие конкретную задачу. Процедуры могут быть объединены в более крупные программы, что является их основой. Модульная конструкцияОдна процедура может вызывать другую — вызывающая процедура называется вызов программы.
Процедуры представляют собой многократно используемые блоки обработки с определенной последовательностью преобразований данных. Они могут принимать несколько входных и выходных параметров и могут быть объявлены как доступные только для чтения или для чтения и записи.
An SQL процедура в SAP HANA его можно создать по адресу:
- Уровень схемы (Узел каталога) — управляется через каталог и виден каждому пользователю с соответствующими правами доступа.
- Уровень пакета (Узел контента) — управляется как артефакт на этапе проектирования внутри пакета приложения.
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 — В процедуру передаются входные данные только для чтения. • ВНЕ — Результат, полученный в результате выполнения процедуры. • ВХОД — оба варианта передают значение на вход и возвращают измененное значение на выход. |
LANGUAGE <lang> |
Язык программирования, используемый в процедуре. По умолчанию: SQLSCRIPT. |
SQL SECURITY <mode> |
Режим безопасности (по умолчанию: DEFINER): • ОПРЕДЕЛЕНИЕ — выполняется с привилегиями создателя процедуры. • ВЫЗЫВАЮЩИЙ — работает с правами вызывающего абонента. |
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 * Внутренние процедуры — укажите столбцы, которые вам действительно нужны, чтобы планы оставались стабильными.
