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: