SAP Tutorial de scripts SQL para HANA: Sintaxis y ejemplos

⚡ Resumen inteligente

Script SQL en SAP HANA amplía el SQL estándar con construcciones funcionales y procedimentales. Permite el uso de procedimientos almacenados y funciones definidas por el usuario, trasladando la lógica intensiva en datos del servidor de aplicaciones a la base de datos.

  • 🧩 Definición básica: Una colección de extensiones de SQL que se utilizan dentro de los procedimientos almacenados en lugar de sentencias SQL simples.
  • 📦 Dos contenedores: Los procedimientos describen una secuencia de transformaciones; las funciones definidas por el usuario se presentan en formato escalar y tabular.
  • 🧠 Lógica declarativa: Define tipos de tablas sin hacer referencia a tablas de la base de datos y ejecuta sentencias SELECT ordinarias.
  • 🎼 Lógica de orquestación: Implementa el flujo de datos con sentencias DDL, DML y de consulta, además de bucles y condicionales.
  • 🔀 Lógica imperativa: Los bucles IF, ELSEIF, ELSE, CASE, FOR y el manejo de excepciones dividen la lógica entre los flujos de datos.
  • 📤 Múltiples Salidas: Un procedimiento SQL Script devuelve varios resultados a través de parámetros de SALIDA, a diferencia de un procedimiento SQL simple.
  • ⚡ Ejecución paralela: Las instrucciones independientes son ejecutadas en paralelo por el motor de cálculo.

Script SQL en SAP HANA

¿Qué es la secuencia de comandos SQL?

SQL Script es una colección de extensiones de SQL. Se puede utilizar en un procedimiento almacenado en lugar de SQL simple. Determina las prórrogas funcionales y procesales.

In SQL El usuario del script puede definir variables locales para estructuras y tablas que se utilizan principalmente para la creación de procedimientos almacenados.

El script SQL también se puede utilizar en la vista de cálculo. En SQL Script, hay dos contenedores lógicos diferentes:

  • Procedimiento (Los procedimientos le permiten describir una secuencia de transformaciones de datos en los datos pasados ​​como tablas de entrada y de base de datos).
  • Función definida por el usuario (el contenedor de función definida por el usuario se separa en función escalar definida por el usuario y función de tabla definida por el usuario).

Los elementos del lenguaje de secuencia de comandos SQL son los siguientes:

Lógica de script SQL declarativa (extensión funcional)

  • Permite la definición de tipos de tablas sin hacer referencia a tablas de bases de datos.
  • Declaración típica como SELECT.
  • Funciones del motor de cálculo (CE).

⚠️ Nota de versión: Los operadores de planes del motor de cálculo, las funciones CE_ como CE_COLUMN_TABLE y CE_JOIN, están obsoletos. SAPEl nuevo desarrollo debe usar sentencias SQL estándar, que el optimizador maneja igual de bien. El código CE existente sigue funcionando, pero debe migrarse la próxima vez que se modifique un procedimiento.

Lógica de script SQL de orquestación (extensión funcional)

La lógica de orquestación se utiliza para implementar el flujo de datos mediante DDL, DML y declaraciones de consulta SQL y controlar la lógica de flujo mediante construcciones de lenguaje imperativos, como bucles y condicionales.

  • Declaración del lenguaje de definición de datos. P.ej. Crear esquema.
  • Lenguaje de manipulación de datos (por ejemplo, insertar).

Lógica de script SQL imperativa (extensión de procedimiento)

La lógica imperativa divide la lógica entre varios flujos de datos. P.ej. IF, ELSEIF, ELSE, CASE, FOR (Bucle) y Excepciones.

Importancia del script SQL

Sólo SQL Script proporciona los elementos necesarios para migrar la lógica con uso intensivo de datos o el funcionamiento del servidor de aplicaciones al servidor de bases de datos.

Puntos clave del script SQL

  • SQL Script se ejecuta y procesa en el motor de cálculo dentro de la base de datos HANA.
  • SQL Script puede realizar cálculos complejos.
  • En SQL Script, se puede declarar una variable local para contener el resultado provisional.
  • El procedimiento de secuencia de comandos SQL puede devolver más resultados utilizando el "parámetro de SALIDA", mientras que el procedimiento SQL normal puede devolver solo uno.
  • En SQL Script, puede definir tipos de tablas globales o locales que se pueden utilizar como parámetros.

Al utilizar SQL Script, se puede lograr el modo de procesamiento paralelo.

Ejemplo de procedimiento de script SQL

Un procedimiento es el contenedor más común. El siguiente ejemplo lee datos de empleados, los filtra y devuelve el resultado a través de un parámetro de tabla de salida.

CREATE PROCEDURE DHK_SCHEMA.GET_HIGH_EARNERS (
  IN  im_min_salary DECIMAL(15,2),
  OUT ex_employees  TABLE (EMP_NAME NVARCHAR(100), SALARY DECIMAL(15,2)),
  OUT ex_row_count  INTEGER
)
LANGUAGE SQLSCRIPT
READS SQL DATA
AS
BEGIN
  -- Declarative logic: a table variable, not a physical table
  lt_all = SELECT EMP_NAME, SALARY
             FROM DHK_SCHEMA.EMPLOYEE
            WHERE SALARY >= :im_min_salary;

  -- Imperative logic: branch on the result
  SELECT COUNT(*) INTO ex_row_count FROM :lt_all;

  IF :ex_row_count = 0 THEN
    ex_employees = SELECT '' AS EMP_NAME, 0 AS SALARY FROM DUMMY WHERE 1 = 0;
  ELSE
    ex_employees = SELECT * FROM :lt_all ORDER BY SALARY DESC;
  END IF;
END;

Hay tres convenciones que vale la pena destacar. Un punto y coma precede a cualquier lectura de una variable, por lo que :lt_all lee la variable de tabla mientras lt_all A la izquierda se le asigna. READS SQL DATA le indica al optimizador que el procedimiento no tiene efectos secundarios, lo que permite una paralelización más agresiva. Y un procedimiento que devuelve varios parámetros de salida es precisamente la capacidad de la que carece SQL estándar.

Llamarlo es sencillo:

CALL DHK_SCHEMA.GET_HIGH_EARNERS (50000, ?, ?);

Funciones definidas por el usuario, tanto escalares como de tabla.

Mientras que un procedimiento realiza acciones, una función devuelve un valor y puede utilizarse dentro de una consulta. SQL Script ofrece dos formas, pero no son intercambiables.

Parámetro UDF escalar Tabla UDF
Returns Un valor único Un conjunto de resultados
Utilizada en Lista SELECT, cláusula WHERE, expresiones La cláusula FROM, como una tabla
Puede modificar los datos No No
Uso típico Cálculo reutilizable como una tasa impositiva Vista parametrizada que devuelve filas filtradas
-- Scalar function: returns one value
CREATE FUNCTION DHK_SCHEMA.ADD_BONUS (im_salary DECIMAL(15,2))
  RETURNS total DECIMAL(15,2)
  LANGUAGE SQLSCRIPT AS
BEGIN
  total := :im_salary * 1.10;
END;

SELECT EMP_NAME, DHK_SCHEMA.ADD_BONUS(SALARY) AS WITH_BONUS
  FROM DHK_SCHEMA.EMPLOYEE;

Una función de tabla se define con RETURNS TABLE y luego se consulta en la cláusula FROM, lo que la convierte en la forma natural de construir un conjunto de datos reutilizable y parametrizado que una vista de cálculo o el informe puede consumir.

SQL Script Mejores Prácticas

Los scripts SQL funcionan bien cuando se escriben para permitir la paralelización del motor, y mal cuando se escriben como código de aplicación. Seis hábitos marcan la diferencia.

  1. Prefiero lo declarativo a lo imperativo. Una sola instrucción basada en conjuntos supera con creces a un bucle que procesa las filas una a una. Utilice un bucle FOR solo cuando la lógica realmente no pueda expresarse como una operación de conjuntos.
  2. Evite los cursores. Obligan al procesamiento fila por fila y anulan por completo el motor de cálculo. Casi cualquier cursor se puede reescribir como una unión o una agregación.
  3. Mantengamos las declaraciones independientes. Dos variables de tabla que no se referencian entre sí se calculan en paralelo. Al encadenar cada paso a través del anterior, se serializa todo el procedimiento.
  4. Declarar LECTURA DATOS SQL donde sea verdadero. Esto indica que el procedimiento no tiene efectos secundarios, lo que permite una mayor optimización.
  5. Filtrar lo antes posible. Reducir el número de filas en la primera variable de tabla reduce todo lo que viene después, mientras que el filtrado al final ya ha pagado el coste.
  6. Migrar para dejar de usar las funciones CE_. Están obsoletas, no se pueden combinar libremente con SQL en una misma instrucción, y el optimizador de SQL ahora maneja mejor el mismo trabajo.

La sintaxis a nivel de sentencia se cubre en SAP HANA-SQL, las funciones disponibles dentro de un procedimiento en SAP Funciones SQL de HANAy los objetos de modelado que consumen estos procedimientos en el SAP Modelado HANA tutorial.

Preguntas Frecuentes

Los dos puntos indican que se está leyendo la variable. Escribirla sin dos puntos a la izquierda le asigna un valor, por lo que ambas formas permiten al analizador distinguir entre asignación y referencia.

No. Los operadores de planes del motor de cálculo están obsoletos. El código existente sigue funcionando, pero los nuevos desarrollos deben usar SQL estándar, que el optimizador ahora maneja al menos igual de bien.

A menudo, sí. Muchos bucles FOR y cursores expresan una unión o una agregación de forma extensa, y la IA puede proponer el equivalente basado en conjuntos. Verifique que el número de filas coincida antes de adoptarlo.

Sí. Leyendo el planViz trace, la IA identifica la instrucción que consume tiempo y si los pasos se serializaron por una dependencia innecesaria entre variables de tabla.

Sí, a través de varios parámetros de tabla de SALIDA. Esta es una de las principales ventajas de SQL Script sobre un procedimiento SQL simple, que solo puede devolver un único resultado.

Resumir este post con: