Ejercicios Prácticos de PL/SQL en Oracle: Creación de Tablas, Inserción y Bloques Anónimos
Creación de Estructura de Base de Datos
A continuación se presenta la creación de las tablas relacionales para el sistema, incluyendo claves primarias y foráneas:
create table Departamento
(codep number,
nombredep varchar2(15),
constraint codep_pk
primary key(codep));
create table Profesor
(codprof number,
nombreprof varchar2(20),
coddep number,
constraint codprof_pk
primary key(codprof),
constraint Departamento_codep_fk
foreign key(coddep)
references Departamento(codep));
create table Asignatura
(cod varchar2(20),
nomasig varchar2(20),
coddep number,
codprof number,
constraint cod_pk
primary key(cod),
constraint Profesor_codprof_fk
foreign key(codprof)
references Profesor(codprof));
Inserción de Datos
Se insertan los registros iniciales correspondientes a los departamentos, profesores y asignaturas:
insert into Departamento values(12,'informatica');
insert into Departamento values(14,'ventas');
insert into Departamento values(16,'publicidad');
insert into Departamento values(18,'diseño grafico');
insert into Departamento values(19,'mecanica');
insert into Profesor values(125,'juan soto',12);
insert into Profesor values(130,'cesar quiroz',12);
insert into Profesor values(129,'camila lara',18);
insert into Profesor values(124,'ana muñoz',14);
insert into Profesor values(126,'mariano jara',18);
insert into Profesor values(127,'maria moya',12);
insert into Profesor values(128,'carlos cruz',19);
insert into Asignatura values('pgb 240','programacion basica',12,125);
insert into Asignatura values('bd 330','base de datos 1',12,130);
insert into Asignatura values('dsb 450','diseño web',18,124);
insert into Asignatura values('pbd 230','base de datos 2',12,125);
insert into Asignatura values('mec 120','mecanica 1',19,128);
insert into Asignatura values('mec 230','mecanica 2',19,128);
insert into Asignatura values('ven 450','ventas 1',14,124);
Bloques de Código PL/SQL
1) Consulta con JOIN
Declare
nomb varchar2(15);
nom varchar2(20);
Begin
select Departamento.nombredep, Profesor.nombreprof into nomb, nom from Departamento, Profesor, Asignatura where Departamento.codep = Profesor.coddep and Profesor.codprof = Asignatura.codprof and Asignatura.nomasig = 'diseño web';
dbms_output.put_line('el nombre del departamento es :'||nomb);
dbms_output.put_line('el nombre del profesor es :'||nom);
End;2) Actualización y Bloque Anidado
Declare
nomprof varchar2(20);
nom varchar2(20);
Begin
update Asignatura set nomasig = 'modelamiento dbdd' where codprof = 130;
begin
select Profesor.nombreprof, Asignatura.nomasig into nomprof, nom from profesor, Asignatura where Profesor.codprof = Asignatura.codprof and Asignatura.nomasig = 'modelamiento dbdd';
dbms_output.put_line('el nombre del profesor es :'||nomprof);
dbms_output.put_line('el nombre de la asignatura es :'||nom);
End;
end;3) Bloque Vacío
3)
4) Bucle LOOP
Declare
numero1 number;
codi number;
nom varchar2(15);
Begin
numero1 := 12;
loop
select codep, nombredep into codi, nom from Departamento where codep = numero1;
dbms_output.put_line('el codigo departamento es: '||codi);
dbms_output.put_line('el nombre del departamento es: '||nom);
dbms_output.put_line('*************** ');
numero1 := numero1 + 2;
exit when numero1 = 18;
end loop;
End;5) Bucle FOR con ROWTYPE
Declare
d Departamento%rowtype;
Begin
for d in (select Profesor.nombreprof, Asignatura.nomasig, Departamento.nombredep from Departamento, Profesor, Asignatura where Departamento.codep = Profesor.coddep and Profesor.codprof = Asignatura.codprof)
loop
dbms_output.put_line('el nombre del profesor es :'||d.nombreprof);
dbms_output.put_line('el nombre de la asignatura es :'||d.nomasig);
dbms_output.put_line('el nombre del departamento es :'||d.nombredep);
dbms_output.put_line('************************');
end loop;
End;