Хранимая процедура в SAP HANA (Учебное пособие по SQL)

⚡ Умное резюме

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

  • 🧱 Выберите место создания: Определяйте процедуры на уровне схемы (каталога) или пакета (содержимого) в зависимости от того, к какой части схемы они относятся. SAP Модель данных HANA.
  • 📥 Используйте параметры целенаправленно: IN передает входные данные, OUT возвращает выходные данные, INOUT делает и то, и другое — для ясности давайте им названия в каждой сигнатуре.
  • 🔐 Тщательно выбирайте средства обеспечения безопасности SQL: DEFINER выполняется с привилегиями создателя; INVOKER выполняется с привилегиями вызывающей стороны — выбор осуществляется на основе политики доступа к данным.
  • 📚 По возможности отмечайте раздел "Только для чтения": Функция READS SQL DATA документирует намерения, оптимизирует планирование и позволяет отображать процедуру в виде представления результатов.
  • 🤖 Используйте ИИ для составления инструкций: Искусственный интеллект-помощники преобразуют логику, изложенную простым языком, в шаблоны CREATE PROCEDURE с параметрами, обработчиками исключений и представлениями результатов.

SAP Хранимые процедуры HANA SQL

Что такое хранимая процедура 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 * Внутренние процедуры — укажите столбцы, которые вам действительно нужны, чтобы планы оставались стабильными.

Часто задаваемые вопросы (FAQ)

Процедура может иметь несколько выходных параметров, выполнять операции 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 PROCEDURE; стандартный шаблон — CREATE OR REPLACE.

Искусственный интеллект-ассистенты генерируют шаблоны CREATE PROCEDURE, предлагают имена параметров, пишут обработчики исключений и переводят логику на простом английском языке в SQLScript. Они также указывают на отсутствующие квалификации схемы и рискованные операции DML в контекстах только для чтения.

Да. Инструменты искусственного интеллекта построчно аннотируют SQLScript, объясняя, что делает каждый параметр, почему был выбран тот или иной тип соединения и где процедура может дать сбой при некорректных входных данных, что значительно ускоряет проверку кода и внедрение новых функций.

Подведем итог этой публикации следующим образом: