Procedimiento almacenado en SAP HANA (Tutorial de SQL)
⚡ Resumen inteligente
SAP Un procedimiento almacenado SQL de HANA es un bloque de SQLScript reutilizable y con nombre que realiza una operación de datos específica. Acepta parámetros IN, OUT e INOUT, se puede marcar como de solo lectura con READS SQL DATA y se crea a nivel de esquema o paquete mediante la sintaxis CREATE PROCEDURE.

¿Qué es un procedimiento almacenado SQL?
A procedimiento almacenado es una unidad de código reutilizable y con nombre que realiza una tarea específica. Los procedimientos se pueden componer en programas más grandes, que es la base de diseño modular. Un procedimiento puede llamar a otro; al que llama se le denomina el programa de llamadas.
Los procedimientos son bloques de procesamiento reutilizables con una secuencia definida de transformaciones de datos. Pueden aceptar múltiples parámetros de entrada y salida, y pueden declararse como de solo lectura o de lectura y escritura.
An SQL procedimiento en SAP HANA se puede crear en:
- Nivel de esquema (Nodo de catálogo): se gestiona a través del catálogo y es visible para todos los consumidores con los privilegios adecuados.
- Nivel de paquete (Nodo de contenido) — gestionado como un artefacto de tiempo de diseño dentro de un paquete de aplicación.
SAP Sintaxis de procedimientos almacenados de HANA
La sintaxis general para crear un procedimiento en SAP HANA se muestra a continuación.
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 }
El CREATE PROCEDURE La instrucción crea un procedimiento utilizando el lenguaje de programación especificado por <lang>El lenguaje predeterminado es SQLScript.
Explicación de los elementos de sintaxis
La tabla que aparece a continuación describe todas las cláusulas utilizadas en la sintaxis de CREATE PROCEDURE.
| Elemento | Mareas Ideales para Lecciones |
|---|---|
<proc_name> |
Nombre del procedimiento. |
<parameter_clause> |
Lista de parámetros, cada uno marcado como ENTRADA, SALIDA o ENTRADA/SALIDA: • IN — entrada de solo lectura pasada al procedimiento. • OUT — Resultado devuelto por el procedimiento. • EN FUERA — ambos reciben un valor de entrada y devuelven el valor modificado de salida. |
LANGUAGE <lang> |
Lenguaje de programación utilizado en el procedimiento. Predeterminado: SQLSCRIPT. |
SQL SECURITY <mode> |
Modo de seguridad (Predeterminado: DEFINER): • DEFINITOR — se ejecuta con los privilegios del creador del procedimiento. • INVOCADOR — se ejecuta con los privilegios de quien llama. |
DEFAULT SCHEMA <default_schema_name> |
Esquema utilizado para resolver objetos no calificados en el cuerpo del procedimiento. Si se omite, se utiliza el esquema de la sesión actual. |
READS SQL DATA |
Marca el procedimiento como de solo lectura. No puede modificar datos ni esquemas, no contiene DDL ni DML, y solo puede llamar a otros procedimientos de solo lectura. |
WITH RESULT VIEW <view_name> |
Define la vista de resultados utilizada como salida del procedimiento. Cuando hay una vista de resultados presente, el procedimiento puede ser consultado por otro SQL declaración como si fuera una tabla o una vista. |
SEQUENTIAL EXECUTION |
Obliga al órgano procedimental a ejecutarse de forma secuencial, sin paralelismo. |
<procedure_body> |
Cuerpo principal del procedimiento, escrito en el lenguaje de programación seleccionado. |
HEADER ONLY |
Crea únicamente las propiedades del procedimiento con un OID, sin compilar el cuerpo. Útil para declaraciones anticipadas. |
Ejemplo: Crear un procedimiento almacenado simple
El siguiente ejemplo crea un procedimiento de solo lectura que devuelve el total de ventas de un cliente determinado.
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;
Inicie el procedimiento con:
CALL GET_CUSTOMER_SALES ('C0001', ?);
SAP HANA Studio (o cualquier cliente JDBC/ODBC) devuelve el valor de ev_total en el parámetro de salida.
Llamar a un procedimiento almacenado
Una vez creado, se invoca un procedimiento almacenado a través del CALL instrucción, opcionalmente dentro de otro procedimiento, una función SQLScript o un cliente externo. Los cuatro patrones de invocación más comunes son:
- Desde SQL:
CALL my_proc(p1, p2, ?);— Los marcadores de posición devuelven valores de SALIDA. - De otro procedimiento:
CALL another_proc(:in1, :out1); - Desde una aplicación: Vincula los parámetros de entrada y lee la salida a través de JDBC, ODBC o el SDK de Cloud.
- Como una mesa virtual: Cuando se declara una vista de resultados, consulte el procedimiento con una sentencia SELECT contra el nombre de la vista.
Mejores prácticas para procedimientos almacenados de HANA
Los siguientes hábitos permiten que los procedimientos de HANA sean legibles, eficientes y fáciles de mantener:
- Nombrar parámetros con prefijos:
iv_para entrada,ev_para exportación yiov_para entrada/salida. - Marcar la intención con LECTURA DE DATOS SQL dondequiera que el procedimiento sea realmente de solo lectura.
- Utilice SQL SECURITY INVOKER para procedimientos compartidos que deben respetar los privilegios de la persona que llama.
- Envuelve cada bloque en BEGIN/END y mantén el cuerpo del texto breve: divide la lógica compleja en procedimientos auxiliares.
- Manejar excepciones: use
DECLARE EXIT HANDLERpara una correcta notificación de errores. - Evitar SELECT * Dentro de los procedimientos, indique las columnas que realmente necesita para que los planes se mantengan estables.
