Created: 2024-09-08 dom 17:51
grant
) a las tablasview
) para la lectura de datoscheck
)
create table PROFESORES(
profesorid integer primary key, profesornombre varchar(50)
);
create table MATERIAS(
materianombre varchar(50) primary key
);
create table CURSOS(
cursoid integer primary key,
profesorid integer references PROFESORES, materianombre references MATERIAS
);
create table ALUMNOS(
alumnoid integer primary key, alumnonombre varchar(50)
);
create table CURSOS_ALUMNOS(
alumnoid integer references ALUMNOS, cursoid integer references CURSOS,
primary key (alumnoid, cursoid)
);
select
sobre las tablas (o vistas que se pudieran hacer)CREA_XXX
create sequence PROFESOR_SECUENCIA;
create or replace procedure CREA_PROFESOR(pprofesornombre varchar, pprofesorid out integer)
as
begin
pprofesorid := PROFESOR_SECUENCIA.nextval;
insert into PROFESORES(profesorid, profesornombre) values(pprofesorid, pprofesornombre);
end;
/
insert
declare
nuevoprofesor integer;
begin
CREA_PROFESOR('María',nuevoprofesor);
dbms_output.put_line('Creado profesor:' || nuevoprofesor );
end;
/
create sequence ALUMNO_SECUENCIA;
create or replace procedure CREA_ALUMNO(palumnonombre varchar, palumnoid out integer)
as
begin
palumnoid := ALUMNO_SECUENCIA.nextval;
insert into ALUMNOS(alumnoid, alumnonombre) values(palumnoid, palumnonombre);
end;
/
create or replace procedure CREA_MATERIA(pmaterianombre varchar)
as
begin
insert into MATERIAS values(pmaterianombre);
end;
/
create sequence CURSO_SECUENCIA;
create or replace procedure CREA_CURSO(pmaterianombre varchar, pprofesorid integer, pcursoid out integer)
as
begin
pcursoid := CURSO_SECUENCIA.nextval;
insert into CURSOS(cursoid,profesorid,materianombre) values(pcursoid,pprofesorid,pmaterianombre);
end;
/
declare
cursoid integer;
profesorid integer;
begin
crea_profesor('Juan', profesorid);
crea_materia('Bases de datos');
crea_curso('Bases de datos', profesorid, cursoid);
dbms_output.put_line('Bases de datos: id:' || cursoid );
dbms_output.put_line('Bases de datos: id de profesor:' || profesorid );
end;
/
create or replace procedure MATRICULA_ALUMNO_EN_CURSO(palumnoid integer, pcursoid integer)
as
yamatriculados number;
begin
select count(*) into yamatriculados from CURSOS_ALUMNOS where cursoid = pcursoid;
if yamatriculados = 10 then
raise_application_error( -20001, 'El curso ' || pcursoid || ' ya tiene 10 alumnos matriculados' );
end if;
insert into CURSOS_ALUMNOS(alumnoid, cursoid) values(palumnoid, pcursoid);
end;
/
declare
cursoid integer;
profesorid integer;
alumnoid integer;
begin
CREA_MATERIA('Materia popular');
CREA_PROFESOR('Un profesor', profesorid);
CREA_CURSO('Materia popular',cursoid);
for i in 1..11 loop
CREA_ALUMNO('Alumno' || i, alumnoid );
dbms_output.put_line( i || ': Voy a matricular al alumno ' || alumnoid || ' en el curso ' || cursoid );
MATRICULA_ALUMNO_EN_CURSO(alumnoid,cursoid);
end loop;
end;
/
create or replace procedure BORRA_ALUMNO(palumnoid integer)
as
begin
delete from ALUMNOS where alumnoid = palumnoid;
end;
/
create or replace procedure BORRA_PROFESOR(pprofesorid integer)
as
numeroprofesores number;
begin
select count(*) into numeroprofesores from PROFESORES;
if numeroprofesores = 1 then
raise_application_error( -20002, 'No se puede borrar el último profesor' );
end if;
delete from PROFESORES where profesorid = pprofesorid;
end;
/
update
y controlar los posibles errores con triggers