Procedimento armazenado em SAP HANA (Tutorial de SQL)

⚡ Resumo Inteligente

SAP Um procedimento armazenado SQL do HANA é um bloco nomeado e reutilizável de SQLScript que executa uma operação de dados específica. Ele aceita parâmetros IN, OUT e INOUT, pode ser marcado como somente leitura com READS SQL DATA e é criado no nível do esquema ou do pacote usando a sintaxe CREATE PROCEDURE.

  • 🧱 Escolha onde criar: Defina os procedimentos no nível do esquema (Catálogo) ou do pacote (Conteúdo), dependendo de onde eles pertencem no SAP Modelo de dados HANA.
  • 📥 Use parâmetros intencionalmente: IN envia a entrada, OUT retorna a saída, INOUT faz ambos — nomeie-os para maior clareza em cada assinatura.
  • 🔐 Escolha a SEGURANÇA SQL com cuidado: DEFINER é executado com os privilégios do criador; INVOKER é executado com os privilégios do chamador — escolha com base na política de acesso a dados.
  • 📚 Marque como somente leitura quando possível: A função READS SQL DATA documenta a intenção, otimiza o planejamento e permite que o procedimento seja exposto por meio de uma visualização de resultados.
  • 🤖 Utilize IA para elaborar procedimentos: Assistentes de IA transformam lógica em linguagem natural em modelos CREATE PROCEDURE com parâmetros, tratamento de exceções e visualização de resultados.

SAP Procedimento armazenado SQL do HANA

O que é um procedimento armazenado em SQL?

A procedimento armazenado É uma unidade de código nomeada e reutilizável que executa uma tarefa específica. Os procedimentos podem ser combinados em programas maiores, o que constitui a base de... design modularUm procedimento pode chamar outro — quem chama é chamado de... programa de chamadas.

Os procedimentos são blocos de processamento reutilizáveis ​​com uma sequência definida de transformações de dados. Eles podem aceitar múltiplos parâmetros de entrada e saída e podem ser declarados como somente leitura ou leitura e gravação.

An SQL procedimento em SAP HANA pode ser criado em:

  • Nível de esquema (Nó de catálogo) — gerenciado por meio do catálogo e visível para todos os consumidores com os privilégios adequados.
  • Nível do pacote (Nó de conteúdo) — gerenciado como um artefato de tempo de design dentro de um pacote de aplicativo.

SAP Sintaxe de procedimento armazenado do HANA

A sintaxe geral para criar um procedimento em SAP A imagem HANA é apresentada abaixo.

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 }

O CREATE PROCEDURE A instrução cria um procedimento usando a linguagem de programação especificada por <lang>O idioma padrão é SQLScript.

Elementos de sintaxe explicados

A tabela abaixo descreve cada cláusula usada na sintaxe CREATE PROCEDURE.

Element Descrição
<proc_name> Nome do procedimento.
<parameter_clause> Lista de parâmetros, cada um marcado como IN, OUT ou INOUT:
. IN — entrada somente leitura passada para o procedimento.
. OUT — resultado retornado pelo procedimento.
. ENTRADA/SAÍDA — ambos passam um valor como entrada e retornam o valor modificado como saída.
LANGUAGE <lang> Linguagem de programação utilizada no procedimento. Padrão: SQLSCRIPT.
SQL SECURITY <mode> Modo de segurança (Padrão: DEFINER):
. DEFINIDORES — é executado com os privilégios do criador do procedimento.
. INVOCADOR — funciona com os privilégios de quem fez a chamada.
DEFAULT SCHEMA <default_schema_name> Esquema usado para resolver objetos não qualificados no corpo do procedimento. Se omitido, o esquema da sessão atual será usado.
READS SQL DATA Marca o procedimento como somente leitura. Ele não pode modificar dados ou esquema, não contém DDL ou DML e só pode chamar outros procedimentos somente leitura.
WITH RESULT VIEW <view_name> Define a visualização de resultados usada como saída do procedimento. Quando uma visualização de resultados está presente, o procedimento pode ser consultado por outro. SQL declaração como se fosse uma tabela ou uma vista.
SEQUENTIAL EXECUTION Força o corpo do procedimento a ser executado sequencialmente, sem paralelismo.
<procedure_body> Corpo principal do procedimento, escrito na linguagem de programação selecionada.
HEADER ONLY Cria apenas as propriedades do procedimento com um OID, sem compilar o corpo. Útil para declarações antecipadas.

Exemplo: Criar um procedimento armazenado simples

O exemplo abaixo cria um procedimento somente leitura que retorna o total de vendas para um determinado cliente.

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;

Solicite o procedimento com:

CALL GET_CUSTOMER_SALES ('C0001', ?);

SAP O HANA Studio (ou qualquer cliente JDBC/ODBC) retorna o valor de ev_total no parâmetro de saída.

Chamando um procedimento armazenado

Uma vez criado, um procedimento armazenado é invocado através do CALL declaração, opcionalmente dentro de outro procedimento, uma função SQLScript ou um cliente externo. Os quatro padrões de invocação mais comuns são:

  • Do SQL: CALL my_proc(p1, p2, ?); — Os marcadores de posição retornam valores de SAÍDA.
  • De outro procedimento: CALL another_proc(:in1, :out1);
  • De uma aplicação: Vincule parâmetros de entrada e leia a saída por meio de JDBC, ODBC ou do Cloud SDK.
  • Como uma mesa virtual: Quando uma visualização de resultados é declarada, consulte o procedimento com um SELECT usando o nome da visualização.

Melhores práticas para procedimentos armazenados HANA

Os hábitos abaixo mantêm os procedimentos do HANA legíveis, eficientes e fáceis de manter:

  • Nomeie os parâmetros com prefixos: iv_ para entrada, ev_ para exportação, e iov_ para entrada/saída.
  • Marque a intenção com READS SQL DATA sempre que o procedimento for genuinamente somente leitura.
  • Use o SQL Security Invoker para procedimentos compartilhados que devem respeitar os privilégios de quem está ligando.
  • Envolva cada bloco em INÍCIO/FIM e mantenha o corpo do código curto — divida a lógica complexa em procedimentos auxiliares.
  • Lidar com exceções: usar DECLARE EXIT HANDLER para uma comunicação de erros adequada.
  • Evite SELECT * Procedimentos internos — nomeie as colunas que você realmente precisa para que os planos permaneçam estáveis.

Perguntas Frequentes

Um procedimento pode ter múltiplos parâmetros OUT, pode executar DML e é invocado com CALL. Uma função retorna um único valor escalar ou de tabela, é executada sem efeitos colaterais e é usada dentro de SELECT, WHERE ou outras expressões.

A linguagem padrão e mais comum é o SQLScript. O HANA também oferece suporte ao R para procedimentos que necessitam de bibliotecas estatísticas e ao L para scripts de baixo nível. O SQLScript é a escolha certa para praticamente todos os procedimentos de negócios.

DEFINER executa o procedimento com os privilégios do usuário que o criou — útil quando o procedimento precisa acessar tabelas que o chamador não pode ver diretamente. INVOKER executa com os privilégios do chamador, o que é mais seguro para procedimentos utilitários compartilhados.

Use READS SQL DATA sempre que o procedimento apenas ler dados e nunca os gravar. Isso documenta a intenção, permite visualizações de resultados e possibilita que o otimizador planeje o procedimento de forma mais agressiva.

Utilize a instrução CALL: CALL proc_name (in_val, out_param);A partir de um aplicativo, vincule entradas e saídas por meio do driver JDBC, ODBC ou Cloud SDK, ou exponha o procedimento por meio do OData para clientes REST.

Abandone um procedimento com DROP PROCEDURE proc_name; e recrie-o com o procedimento CREATE OR REPLACE. SAP O HANA não suporta ALTER PROCEDURE; o padrão padrão é CREATE OR REPLACE.

Os assistentes de IA geram modelos de CREATE PROCEDURE, sugerem nomes de parâmetros, escrevem manipuladores de exceção e traduzem lógica em inglês simples para SQLScript. Eles também apontam qualificações de esquema ausentes e DML arriscado em contextos somente leitura.

Sim. As ferramentas de IA anotam o SQLScript linha por linha — explicando o que cada parâmetro faz, por que uma determinada junção foi escolhida e onde o procedimento pode falhar com entradas inválidas — tornando a revisão de código e a integração de novos membros muito mais rápidas.

Resuma esta postagem com: