Saltar al contenido principal
eLearner.app
Módulo 12 · Lección 1 de 445/57 en el curso~15 min
Lecciones del módulo (1/4)

UDFs y SQL base

Hasta ahora hemos estado enviando consultas desde el servidor Node.js. Pero si se utiliza una fórmula en docenas de consultas diferentes (por ejemplo, calcular el precio final, incluido el IVA), ¿por qué duplicar las matemáticas en JavaScript? Funciones SQL (Funciones definidas por el usuario - UDF) nos permiten crear "macros" dentro de la propia base de datos.

A continuación se explica cómo crear una macro SQL matemática:

SQL
CREATE OR REPLACE FUNCTION calculate_tax(price NUMERIC)
RETURNS NUMERIC AS $$
  SELECT price * 1.22;
$$ LANGUAGE sql;

Una vez que se ejecuta este comando, la función permanece para siempre en nuestra base de datos. Se puede llamar desde cualquier consulta:

SQL
SELECT name, calculate_tax(unit_price) AS price_with_tax FROM products;

Creación dinámica

Podemos definir tantas variables como queramos, especificando sus tipos, y LANGUAGE sql ejecutará la consulta y devolverá implícitamente la última declaración colocada entre los signos de dólar $$.

Pruébalo tú mismo

Ejercicio#sql.m12.l1.e1
Intentos: 0Cargando...

Cree una función invocable simple llamada 'get_full_name' que acepte dos parámetros de TEXTO ('primer_nombre' TEXTO, 'apellido' TEXTO). Debe devolver un valor de TEXTO. Adentro, haga un SELECT trivial que concatene los dos argumentos con un solo espacio entre ellos y declarelo como lenguaje sql.

Cargando editor...
Mostrar pista

CREAR O REEMPLAZAR FUNCIÓN get_full_name(primer_nombre TEXTO, apellido_TEXTO) DEVUELVE EL TEXTO COMO $$ SELECCIONAR primer_nombre || ' ' || apellido; $$ IDIOMA sql;

Solución disponible después de 3 intentos

Ejercicio#sql.m12.l1.e2
Intentos: 0Cargando...

En UDF más avanzadas podemos incrustar consultas completas. Cree una función 'get_customer_count()' que no acepte parámetros y DEVUELVA un ENTERO. Dentro, ejecute un trivial 'SELECT COUNT(id) FROM clientes'. Declárelo como lenguaje SQL puro.

Cargando editor...
Mostrar pista

Cuidado: COUNT devuelve un bigint, ¡transmítelo a INTEGER para que coincida con el tipo de retorno! CREAR O REEMPLAZAR FUNCIÓN get_customer_count() DEVUELVE UN INTEGER COMO $$ SELECT CAST(COUNT(id) AS INTEGER) FROM clientes; $$ IDIOMA sql;

Solución disponible después de 3 intentos