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.

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, eiov_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 HANDLERpara 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.
