Está en la página 1de 6

create procedure insertar_profesor (

v_nombre in profesor.nombre%TYPE

is

v_cantidad number;

begin

select count(id_profesor) + 1 into v_cantidad from profesor;

insert into profesor values(v_cantidad, v_nombre);

commit;

end insertar_profesor;

call insertar_profesor('Walter Marticorena');

execute insertar_profesor('Jesús Salinas');

call insertar_profesor('Moises MESCUA');

execute insertar_profesor('Katherine Mayta');

select * from profesor;

create or replace procedure insertar_infante

v_nom in infante.nombre%TYPE,

v_fecha_nac in infante.fecha_nac%TYPE

is

v_cantidad number;

begin

select count(id_infante) + 1 into v_cantidad from infante;

insert into infante values (v_cantidad, v_nom, v_fecha_nac);

commit;
end insertar_infante;

call insertar_infante('Juan pérez','08-jul-14');

execute insertar_infante('Verónika mendoza','08-jun-15');

call insertar_infante('Alumno 3','03-jul-13');

execute insertar_infante('Alumno 4','15-jun-12');

call insertar_infante('Alumno 5','28-jul-11');

execute insertar_infante('Alumno 6','18-jun-10');

call insertar_infante('Juan pérez','08-jul-09');

execute insertar_infante('Ver endoza','08-jun-08');

call insertar_infante('Alumno 9','03-jul-07');

execute insertar_infante('Alumno 10','15-jun-06');

call insertar_infante('Alumno 11','28-jul-05');

execute insertar_infante('Alumno 12','18-jun-04');

select * from infante;

create or replace procedure insertar_curso

v_id_curso in curso.id_curso%TYPE,

v_denominacion in curso.DENOMINACION%TYPE,

v_hora_inicio in curso.hora_inicio%TYPE,

v_hora_fin in curso.hora_fin%TYPE,

v_tipo in curso.tipo%TYPE,

v_edad_inicial in curso.edad_inicial%TYPE,

v_edad_final in curso.edad_final%TYPE,

v_id_profesor in curso.id_profesor%TYPE

is

begin
insert into curso values(v_id_curso, v_denominacion, v_hora_inicio, v_hora_fin, v_tipo,
v_edad_inicial, v_edad_final, v_id_profesor);

commit;

end insertar_curso;

call insertar_curso('blanco','curso 1',8, 10,'diario',3, 5, 1);

call insertar_curso('gris','curso 2',10, 12,'diario', 6, 9, 2);

call insertar_curso('plomo','curso3',12, 14,'diario', 10, 14, 3);

call insertar_curso('plateado','curso4',15, 18,'interdiario', 15, 18, 4);

call insertar_curso('negro','curso4',18, 50,'interdiario', 15, 18, 4);

select * from curso;

create or replace function calcula_edad(

v_fecha_nac in infante.fecha_nac%TYPE

return int

is

v_edad int;

begin

select floor(sysdate-v_fecha_nac)/365 into v_edad from dual;

return v_edad;

end calcula_edad;

select id_infante, fecha_nac, calcula_edad(fecha_nac) from infante;

create or replace trigger valida_edad

before insert on inscripcion


for each row

declare

v_edad_inicial curso.edad_inicial%TYPE;

v_edad_final curso.edad_final%TYPE;

v_edad number;

begin

select edad_inicial, edad_final into v_edad_inicial, v_edad_final from curso where id_curso
= :new.id_curso;

select calcula_edad(fecha_nac) into v_edad from infante where id_infante = :new.id_infante;

if v_edad < v_edad_inicial or v_edad > v_edad_final then

raise_application_error(-20227, 'infante fuera del rango de edad para el curso');

end if;

end;

create or replace procedure inscribir

v_id_curso in inscripcion.id_curso%TYPE,

v_id_infante in inscripcion.id_infante%TYPE,

v_fecha_reg in inscripcion.fecha_reg%TYPE,

v_fecha_inicio in inscripcion.fecha_inicio%TYPE,

v_fecha_fin in inscripcion.fecha_fin%TYPE,

v_nro_pagos in inscripcion.nro_pagos%TYPE,

v_estado in inscripcion.estado%TYPE,

v_nota in inscripcion.nota%TYPE

is

begin

insert into inscripcion values(v_id_curso, v_id_infante, v_fecha_reg, v_fecha_inicio, v_fecha_fin,


v_nro_pagos, v_estado, v_nota);
commit;

end inscribir;

call inscribir('blanco',1,'12/jul/17',sysdate+1,sysdate+8,1,'OK','A');

call inscribir('blanco',2,'12/jul/17',sysdate+1,sysdate+8,1,'OK','A');

call inscribir('blanco',3,'12/jul/17',sysdate+1,sysdate+8,1,'OK','A');

call inscribir('blanco',4,'12/jul/17',sysdate+1,sysdate+8,1,'OK','A');

call inscribir('blanco',5,'12/jul/17',sysdate+1,sysdate+8,1,'OK','A');

select * from inscripcion;

create or replace function cantidad_inscritos

v_id_curso inscripcion.id_curso%TYPE,

v_estado inscripcion.estado%TYPE

return int

is

v_cantidad int;

begin

select count(id_infante) into v_cantidad from inscripcion where id_curso = v_id_curso and
estado = v_estado;

return v_cantidad;

end cantidad_inscritos;

select cantidad_inscritos(id_curso,'ok') from inscripción;

select cantidad_inscritos('blanco','ok') from dual;


alter table curso add nro_alumno number;

select * from curso;

create or replace procedure actualiza_nro_alumnos

v_id_curso in curso.id_curso%TYPE,

v_nro_alumno in curso.nro_alumno%TYPE

is

begin

update curso set nro_alumno = v_nro_alumno where id_curso = v_id_curso;

commit;

end actualiza_nro_alumnos;

call actualiza_nro_alumnos('blanco',5);

call actualiza_nro_alumnos('gris',4);

call actualiza_nro_alumnos('plomo',3);

call actualiza_nro_alumnos('plateado',2);

call actualiza_nro_alumnos('negro',1);

También podría gustarte