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.

  • 🧱 Elige dónde crearlo: Defina los procedimientos a nivel de esquema (Catálogo) o paquete (Contenido) dependiendo de dónde pertenezcan en el SAP Modelo de datos HANA.
  • 📥 Utilice parámetros de forma intencionada: IN pasa la entrada, OUT devuelve la salida, INOUT hace ambas cosas; asígneles nombres claros en cada firma.
  • 🔐 Elija SQL SECURITY con cuidado: DEFINER se ejecuta con los privilegios del creador; INVOKER se ejecuta con los del llamador; la elección se basa en la política de acceso a los datos.
  • 📚 Marcar como de solo lectura cuando sea posible: La función READS SQL DATA documenta la intención, optimiza la planificación y permite que el procedimiento se exponga a través de una vista de resultados.
  • 🤖 Utilice la IA para elaborar procedimientos: Los asistentes de IA convierten la lógica del lenguaje natural en plantillas de PROCEDIMIENTO DE CREACIÓN con parámetros, manejadores de excepciones y vistas de resultados.

SAP Procedimiento almacenado SQL de HANA

¿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 y iov_ 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 HANDLER para 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.

Preguntas Frecuentes

Un procedimiento puede tener múltiples parámetros de salida, puede ejecutar DML y se invoca con CALL. Una función devuelve un único valor escalar o de tabla, se ejecuta sin efectos secundarios y se utiliza dentro de SELECT, WHERE u otras expresiones.

El lenguaje predeterminado y más común es SQLScript. HANA también admite R para procedimientos que requieren bibliotecas estadísticas y L para scripts de bajo nivel. SQLScript es la opción adecuada para casi cualquier procedimiento de negocio.

DEFINER ejecuta el procedimiento con los privilegios del usuario que lo creó, lo cual resulta útil cuando el procedimiento debe acceder a tablas que el llamador no puede ver directamente. INVOKER se ejecuta con los privilegios del llamador, lo cual es más seguro para procedimientos de utilidad compartida.

Utilice READS SQL DATA siempre que el procedimiento solo lea datos y nunca los escriba. Esto documenta la intención, permite visualizar los resultados y facilita que el optimizador planifique el procedimiento de forma más eficiente.

Utilice la instrucción CALL: CALL proc_name (in_val, out_param);Desde una aplicación, vincule las entradas y salidas a través del controlador JDBC, ODBC o Cloud SDK, o exponga el procedimiento a través de OData para clientes REST.

Deje de realizar un procedimiento con DROP PROCEDURE proc_name; y recrearlo con el procedimiento CREATE OR REPLACE. SAP HANA no admite ALTER PROCEDURE; el patrón estándar es CREATE OR REPLACE.

Los asistentes de IA generan plantillas de CREATE PROCEDURE, sugieren nombres de parámetros, escriben manejadores de excepciones y traducen la lógica en lenguaje natural a SQLScript. También señalan las cualificaciones de esquema faltantes y las operaciones DML riesgosas dentro de contextos de solo lectura.

Sí. Las herramientas de IA anotan el código SQLScript línea por línea, explicando qué hace cada parámetro, por qué se eligió una unión en particular y dónde podría fallar el procedimiento con entradas incorrectas, lo que hace que la revisión del código y la incorporación sean mucho más rápidas.

Resumir este post con: