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.
