Primeros pasos en PL/SQL
Objetivos• Realizar el primer código en PL/SQL.
• Implementar funciones y procedimientos en PL/SQL.
Actividad
Se dispone de la tabla aula y de la tabla asignaturas. Se desea asignar horarios de manera que a cada asignatura se le asigne un aula a una determinada hora. Para ello se construye una relación
denominada horario entre aula y asignatura, que se implementará mediante la tabla HORARIO.
Esta tabla debe rellenarse en base al siguiente algoritmo:
Mientras queden asignaturas por asignar aula y aulas disponibles obtener siguiente asignatura obtener siguiente par
insertar tupla
1.- Eliminar la clave ajena a aula de la tabla asignaturas.
2.- Crear la tabla HORARIO, con las siguientes especificaciones:
Campos:
-codigoAula del tipo codigo de la tabla AULAS
-nombreAsignatura del tipo nombre de la tabla ASIGNATURAS
-hora de tipo entero con rango 1 a 5, minimizando el espacio requerido para éste
Restricciones:
-El par
-El par
-El par
-codigoAula será clave ajena a codigo de la tabla AULAS
-nombreAsignatura será clave ajena a nombre de la tabla ASIGNATURAS
3.- Generar el código PL/SQL que rellene de la forma indicada la tabla HORARIO.
declare4.- Crear un procedimiento denominado generaHorario que utilice el código generado en el punto 3.
horaactual horario.hora%TYPE;
cursor lasig IS select nombre from asignaturas;
maasig lasig%ROWTYPE;
cursor laula IS select codigo from aulas;
maaula laula%ROWTYPE;
begin
open lasig;
open laula;
fetch laula INTO maaula;
fetch lasig INTO maasig;
horaactual := 1;
WHILE laula%FOUND AND lasig%FOUND LOOP
INSERT INTO horario (CODIGOAULA,NOMBREASIGNATURA,HORA)
VALUES (maaula.codigo ,maasig.nombre, horaactual );
horaactual := horaactual + 1;
fetch lasig INTO maasig;
if horaactual >5 then
horaactual := 1;
fetch laula INTO maaula;
end if;
END LOOP;
END;
CREATE OR REPLACE PROCEDURE generaHorario IS5.- Crear una función denominada consultaAula que recibe por parámetro el nombre de una asignatura y devuelve el código del aula de dicha asignatura.
horaactual horario.hora%TYPE;
cursor lasig IS select nombre from asignaturas;
maasig lasig%ROWTYPE;
cursor laula IS select codigo from aulas;
maaula laula%ROWTYPE;
begin
open lasig;
open laula;
fetch laula INTO maaula;
fetch lasig INTO maasig;
horaactual := 1;
WHILE laula%FOUND AND lasig%FOUND LOOP
INSERT INTO horario (CODIGOAULA,NOMBREASIGNATURA,HORA)
VALUES (maaula.codigo ,maasig.nombre, horaactual );
horaactual := horaactual + 1;
fetch lasig INTO maasig;
if horaactual >5 then
horaactual := 1;
fetch laula INTO maaula;
end if;
END LOOP;
END;
CREATE OR REPLACE FUNCTION consultaAula (argumento1 IN horario.NOMBREASIGNATURA%TYPE)
RETURN horario.codigoaula%TYPE
IS
cod horario.codigoaula%TYPE;
begin
Select horario.codigoaula into cod
from horario
where argumento1 = horario.NOMBREASIGNATURA;
RETURN cod;
END;
No hay comentarios:
Publicar un comentario