Vous êtes sur la page 1sur 5

Taller de Aplicación

1. Enviar por parámetro el número del día y retornar en letras si es LUNES, MARTES …..
DOMINGO, asumiendo que 1 es lunes.

CREATE OR REPLACE FUNCTION dia_semana(int)


RETURNS varchar AS $$
DECLARE
num_dia ALIAS FOR $1;
nombre_dia TEXT ARRAY DEFAULT ARRAY['LUNES',
'MARTES','MIERCOLES','JUEVES','VIERNES','SABADO','DOMINGO'];

BEGIN
IF(nombre_dia[num_dia] IS NOT NULL ) THEN
RETURN nombre_dia[num_dia];
ELSE
RETURN 'EL NUMERO '|| num_dia || ' NO ES UN DIA DE LA SEMANA';
END IF;
END;
$$ LANGUAGE plpgsql;

2. Procedimiento que retorne los apellidos y nombres de un estudiante enviando su CODIGO


por parámetro.

CREATE OR REPLACE FUNCTION nombre_estudiante(varchar)


RETURNS TEXT AS $$
DECLARE
codigo ALIAS FOR $1;
registro RECORD;
BEGIN
SELECT INTO registro
(
CASE
WHEN est_primer_nombre <> '' THEN est_primer_nombre
ELSE ''
END ||
CASE
WHEN est_segundo_nombre <> '' THEN ' '|| est_segundo_nombre
ELSE ''
END ||
CASE
WHEN est_primer_apellido <> '' THEN ' '|| est_primer_apellido
ELSE ''
END ||
CASE
WHEN est_segundo_apellido <> '' THEN ' '|| est_segundo_apellido
ELSE ''
END
)
AS nombre
FROM estudiante
WHERE est_codigo = codigo;

IF(registro.nombre IS NULL ) THEN


RETURN 'NO EXISTE UN ESTUDIANTE CON CODIGO ' || codigo;
ELSE
RETURN registro.nombre;
END IF;

END;
$$ LANGUAGE plpgsql;
3. Enviar por parámetro el código del estudiante y el código de la asignatura y retornar el
promedio de notas obtenido.

CREATE OR REPLACE FUNCTION promedio_notas(varchar,varchar)


RETURNS FLOAT AS $$
DECLARE
codigo_estudiante ALIAS FOR $1;
codigo_asignatura ALIAS FOR $2;
registro RECORD;
BEGIN
SELECT INTO registro (ases.asiest_primer_parcial + ases.asiest_segundo_parcial +
ases.asiest_final) / 3 AS promedio
FROM asignatura_estudiante ases
INNER JOIN estudiante est ON ases.asiest_estudiante = est.est_id
INNER JOIN asignatura asi ON ases.asiest_asignatura = asi.asi_id
WHERE est.est_codigo = codigo_estudiante AND asi.asi_codigo = codigo_asignatura;

RETURN registro.promedio;
END;
$$ LANGUAGE plpgsql;

Nota: no se valida si la nota es null ya que por defecto se guarda un 0;

4. Enviar por parámetro el número del parcial (parcial1, parcial2, parcial3) y mostrar la nota
más alta de dicho parcial
CREATE OR REPLACE FUNCTION nota_mayor(varchar)
RETURNS FLOAT AS $$
DECLARE
parcial ALIAS FOR $1;
registro RECORD;
BEGIN
IF(parcial = 'parcial1') THEN
SELECT INTO registro MAX(asiest_primer_parcial) as nota_mayor FROM
asignatura_estudiante;
END IF;
IF(parcial = 'parcial2') THEN
SELECT INTO registro MAX(asiest_segundo_parcial) as nota_mayor FROM
asignatura_estudiante;
END IF;
IF(parcial = 'parcial3') THEN
SELECT INTO registro MAX(asiest_final) as nota_mayor FROM
asignatura_estudiante;
END IF;
IF FOUND THEN
RETURN registro.nota_mayor;
ELSE
RETURN NULL;
END IF;

END;
$$ LANGUAGE plpgsql;

5. Enviar por parámetro una asignatura y mostrar el promedio de la nota final


CREATE OR REPLACE FUNCTION promedio_nota_final(varchar)
RETURNS FLOAT AS $$
DECLARE
promedio_nota_final ALIAS FOR $1;
registro RECORD;
BEGIN
SELECT INTO registro AVG(asies.asiest_final) as promedio_nota_final
FROM asignatura_estudiante asies
INNER JOIN asignatura asi ON asies.asiest_asignatura = asi.asi_id
WHERE asi.asi_nombre like '%'||promedio_nota_final||'%';

RETURN registro.promedio_nota_final;
END;
$$ LANGUAGE plpgsql;

Vous aimerez peut-être aussi