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

Lógica avanzada con PL/pgSQL

Las funciones escritas en LANGUAGE sql solo pueden ejecutar consultas estándar una tras otra. Si necesitáramos algo más avanzado como "SI el total ingresado es mayor que 100, ENTONCES aplique un descuento", SQL simple no puede hacerlo por sí solo. Necesitamos utilizar PL/pgSQL, un lenguaje de programación de procedimientos completo integrado en Postgres.

En PL/pgSQL agregamos los cuerpos clásicos hechos de BEGIN .. END, variables y declaraciones condicionales.

SQL
CREATE OR REPLACE FUNCTION valuta_cliente(ordini INTEGER)
RETURNS TEXT AS $$
BEGIN
  IF ordini > 10 THEN
    RETURN 'VIP';
  ELSE
    RETURN 'Standard';
  END IF;
END;
$$ LANGUAGE plpgsql;

¡Este poder nos permite descargar bloques masivos de lógica repetitiva que de otro modo escribiríamos en JS, empaquetándolos en funciones rápidas y seguras ejecutadas cerca de los datos con una latencia muy baja!

Pruébalo tú mismo

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

Queremos una función compleja que se reemplace a sí misma si ya existe ('get_price_label'), acepte 'precio' como NUMÉRICO y devuelva un TEXTO detallado. Utilice PL/pgSQL. Abra BEGIN. Escriba la lógica: si el precio es > 100,00, devuelva la cadena 'Premium'. ELSE devuelve 'Economico'. Cierra el FINAL condicional; y el cuerpo.

Cargando editor...
Mostrar pista

CREAR O REEMPLAZAR FUNCIÓN get_price_label(precio NUMÉRICO) DEVUELVE EL TEXTO COMO $$ COMIENZA SI el precio > 100,00 ENTONCES DEVUELVE 'Premium'; ELSE REGRESA 'Económico'; FINALIZAR SI; FIN; $$ IDIOMA plpgsql;

Solución disponible después de 3 intentos

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

Puede declarar variables temporales antes de BEGIN con la palabra clave DECLARE. Escriba una función 'saluta_utente(userid INTEGER)' -> Devuelve TEXTO, lógica PL/pgSQL. Dentro de ella DECLARE una variable de cadena 'nome_utente TEXT;'. Luego, dentro de BEGIN, complete esa variable con el nombre consultando dinámicamente 'clientes' usando la cláusula especial 'SELECT first_name INTO nome_utente DESDE... DONDE id = ID de usuario'. Finalmente, RETURN concatena la variable a 'Ciao'.

Cargando editor...
Mostrar pista

DECLARAR nome_utente TEXTO; COMENZAR SELECCIONAR nombre EN nome_utente... REGRESAR 'Ciao ' || nombre_utente;

Solución disponible después de 3 intentos