Documente Academic
Documente Profesional
Documente Cultură
Presentacin de Proyecto
Final
Profesor: Juan Manuel Gutierrez Crdenas
Alumno: Michel Jared Castro Bravo
18 de Octubre de 2016
slo se realiza una prueba en una fecha determinada, entre una hora
de inicio y una de fin. Para disear esta relacin podra usarse una
tabla externa con un cdigo de horario, pero se consider ms
apropiado crear una restriccin UNIQUE uniendo las columnas
FechaRealizacion, HoraInicio y HoraFin en la misma tabla
Prueba.
SCRIPTS
1. Creacin de tablas y restricciones:
create table Empleado(
IdEmpleado number primary key,
NombreEmpleado varchar2(30) not null,
ApellidoEmpleado varchar2(30) not null,
Sexo char(1) not null,
FechaNacimiento date
CHECK (EXTRACT(year FROM FechaNacimiento)
EXTRACT(year FROM sysdate) < 50),
-- Con esta restriccin se limita la edad del empleado
DNI number not null,
EmailEmpleado varchar2(40),
Telefono number,
Cargo char(20),
Sueldo number not null
);
create table Agente(
IdAgente number primary key not null
references empleado(IdEmpleado)
);
create table Cliente(
IdCliente number primary key,
NomCli varchar2(30) not null,
DNI number,
EmailCli varchar2(40) null,
Telefono number
);
create table Castings(
IdCasting number primary key,
NombreCasting varchar2(40) not null,
FechaContratacion date,
Presupuesto number,
FechaInicio date,
FechaFin date,
IdCliente number
references cliente(idcliente),
IdAgente number
references agente(idagente)
);
create table Camarografo(
IdCamarografo number primary key
references empleado(idempleado)
);
create table Camarografo_Casting(
IdCasting number not null
references castings(Idcasting),
IdCamarografo number not null
references camarografo(idcamarografo),
primary key (IdCasting, IdCamarografo)
);
create table Perfil(
IdPerfil number primary key,
NombrePerfil varchar2(30) not null,
Atributos varchar2(200) not null
);
create table Perfil_Casting(
IdCasting number not null
references castings (idcasting),
IdPerfil number not null
references perfil (idperfil),
primary key (idcasting, idperfil)
);
create table Fase(
IdFase number primary key,
IdCasting number
references castings(idcasting),
NumSecuencia number not null,
Descripcion varchar2(50),
FechaInicio date
);
create sequence seq_fase start with 1 increment by 1 cache 100;
create table Candidato(
IdCandidato number primary key,
NombreCandidato varchar2(30) not null,
EmailCandidato varchar2(50), Telefono number,
IdPerfil number references perfil(idperfil)
);
create table Sala(
IdSala number primary key,
NombreSala varchar2(15),
UbicacionSala varchar2(30),
Dimensiones char(10)
2. Insercin de datos:
insert
insert
insert
insert
insert
insert
into
into
into
into
into
into
Cliente
Cliente
Cliente
Cliente
Cliente
Cliente
values(1001,
values(1002,
values(1003,
values(1004,
values(1005,
values(1006,
insert
into
Empleado
"Maria","Ruiz",'F','12/03/1990',23453445,"maria@hotmail.com",
"Agente Casting",934576457,4000);
insert
into
Empleado
"Angie","Vasquez",'F','12/03/1990',34534534,"angie@hotmail.com",
"Agente Casting",934875854,4000);
insert
into
Empleado
"Braulio","Velasquez",'M','12/03/1990',34534534,"braulio@hotmail.com",
"Camarografo",993948575,3500);
insert
into
Empleado
"Renato","Pozo",'M','12/03/1990',22342343,"renato@hotmail.com",
"Camarografo",938475874,3500);
insert
into
Empleado
"Carla","Jaules",'F','12/03/1990',54673234,"carla@hotmail.com",
"Camarografo",999347674,3500);
insert
into
Empleado
"David","Mauro",'M','12/03/1990',74334534,"david@hotmail.com",
"Camarografo",923847834,3500);
insert
into
Empleado
"Andre","Briones",'M','12/03/1990',74345222,"andre@hotmail.com",
"Camarografo",994567565,3500);
insert
into
Empleado
"Angel","Coronel",'M','12/03/1990',34523123,"angel@hotmail.com",
"Camarografo",999485712,3500);
insert
into
Empleado
"Roberto","Puentes",'M','12/03/1990',23563465,"roberto@hotmail.com",
"Camarografo",934674426,3500);
insert
into
Empleado
"Cecilia","Mao",'F','12/03/1990',63552343,"ceciliam@hotmail.com",
"Agente Casting",993498737,4000);
insert
insert
insert
insert
insert
into
into
into
into
into
Agente
Agente
Agente
Agente
Agente
insert
insert
insert
insert
insert
insert
insert
insert
insert
into
into
into
into
into
into
into
into
into
Camarografo
Camarografo
Camarografo
Camarografo
Camarografo
Camarografo
Camarografo
Camarografo
Camarografo
values(100011,
values(100012,
values(100013,
values(100014,
values(100015,
values(100016,
values(100017,
values(100018,
values(100019,
values(100020,
values(100007);
values(100008);
values(100011);
values(100012);
values(100020);
values(100009);
values(100010);
values(100013);
values(100014);
values(100015);
values(100016);
values(100017);
values(100018);
values(100019);
20000,
18000,
15000,
17000,
'dd/mm/yyyy'),TO_DATE('18/07/2015','dd/mm/yyyy'),1003, 100020);
insert
insert
insert
insert
insert
insert
insert
insert
into
into
into
into
into
into
into
into
Perfil_Casting
Perfil_Casting
Perfil_Casting
Perfil_Casting
Perfil_Casting
Perfil_Casting
Perfil_Casting
Perfil_Casting
values(10001,
values(10001,
values(10002,
values(10002,
values(10002,
values(10003,
values(10003,
values(10004,
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
1);
2);
1);
4);
5);
2);
3);
1);
values(10001,
values(10001,
values(10001,
values(10001,
values(10001,
values(10001,
values(10001,
values(10001,
values(10002,
values(10002,
values(10002,
values(10002,
values(10002,
values(10002,
values(10002,
values(10003,
values(10003,
values(10003,
values(10003,
values(10003,
values(10004,
values(10004,
values(10004,
values(10004,
values(10004,
values(10004,
09);
10);
13);
14);
15);
16);
17);
18);
13);
18);
19);
17);
10);
09);
15);
09);
19);
17);
14);
15);
09);
10);
13);
14);
15);
16);
into
into
into
into
into
into
Sala
Sala
Sala
Sala
Sala
Sala
values(101,
values(102,
values(103,
values(104,
values(105,
values(106,
"Sala1",
"Sala2",
"Sala3",
"Sala4",
"Sala5",
"Sala6",
null,
null,
null,
null,
null,
null,
null);
null);
null);
null);
null);
null);
into
into
into
into
Pruebas
Pruebas
Pruebas
Pruebas
values(1111111,
values(1111111,
values(1111111,
values(1111111,
1000001,
1000002,
1000003,
1000004,
1,
2,
3,
4,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
110,
110,
110,
110,
"no apto");
"apto");
"apto");
"apto");
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
values(1111111,
values(1111111,
values(1111111,
values(1111111,
values(1111111,
values(1111111,
values(1111111,
values(1111111,
values(1111111,
values(1111111,
values(1111111,
values(1111112,
values(1111112,
values(1111112,
values(1111112,
values(1111112,
values(1111112,
values(1111112,
values(1111112,
values(1111112,
values(1111112,
values(1111112,
values(1111113,
values(1111113,
values(1111113,
values(1111113,
values(1111113,
values(1111113,
values(1111113,
values(1111113,
values(1111114,
values(1111114,
values(1111114,
values(1111114,
values(1111114,
values(1111115,
values(1111115,
values(1111115,
values(1111115,
values(1111115,
values(1111115,
values(1111115,
values(1111115,
values(1111115,
values(1111115,
values(1111116,
values(1111116,
values(1111116,
values(1111116,
values(1111116,
values(1111116,
values(1111116,
values(1111116,
values(1111117,
values(1111117,
values(1111117,
values(1111117,
values(1111117,
values(1111117,
values(1111118,
values(1111118,
values(1111118,
values(1111118,
values(1111119,
values(1111119,
1000005,
1000006,
1000007,
1000008,
1000009,
1000010,
1000011,
1000012,
1000013,
1000014,
1000015,
1000002,
1000003,
1000004,
1000006,
1000007,
1000008,
1000009,
1000010,
1000011,
1000013,
1000015,
1000002,
1000003,
1000006,
1000008,
1000009,
1000010,
1000013,
1000015,
1000002,
1000003,
1000008,
1000009,
1000015,
1000016,
1000017,
1000018,
1000019,
1000020,
1000021,
1000022,
1000023,
1000024,
1000025,
1000016,
1000017,
1000018,
1000020,
1000021,
1000022,
1000023,
1000024,
1000017,
1000018,
1000020,
1000022,
1000023,
1000024,
1000017,
1000018,
1000020,
1000024,
1000026,
1000027,
insert into Pruebas values(1111119, 1000028, 3, null, null, null, 110, "no apto");
insert into Pruebas values(1111119, 1000029, 4, null, null, null, 110, "apto");
insert into Pruebas values(1111119, 1000030, 5, null, null, null, 110, "apto");
insert into Pruebas values(1111119, 1000031, 6, null, null, null, 110, "apto");
insert into Pruebas values(1111119, 1000032, 7, null, null, null, 110, "no apto");
insert into Pruebas values(1111119, 1000033, 8, null, null, null, 110, "apto");
insert into Pruebas values(1111119, 1000034, 9, null, null, null, 110, "apto");
insert into Pruebas values(1111119, 1000035, 10, null, null, null, 110, "apto");
insert into Pruebas values(1111119, 1000036, 11, null, null, null, 110, "apto");
insert into Pruebas values(1111119, 1000037, 12, null, null, null, 110, "apto");
insert into Pruebas values(1111120, 1000026, 1, null, null, null, 111, "no apto");
insert into Pruebas values(1111120, 1000029, 2, null, null, null, 111, "apto");
insert into Pruebas values(1111120, 1000030, 3, null, null, null, 111, "apto");
insert into Pruebas values(1111120, 1000031, 4, null, null, null, 111, "apto");
insert into Pruebas values(1111120, 1000033, 5, null, null, null, 111, "no apto");
insert into Pruebas values(1111120, 1000034, 6, null, null, null, 111, "apto");
insert into Pruebas values(1111120, 1000035, 7, null, null, null, 111, "apto");
insert into Pruebas values(1111120, 1000036, 8, null, null, null, 111, "no apto");
insert into Pruebas values(1111120, 1000037, 9, null, null, null, 111, "apto");
insert into Pruebas values(1111121, 1000029, 1, null, null, null, 101, "no apto");
insert into Pruebas values(1111121, 1000030, 2, null, null, null, 101, "no apto");
insert into Pruebas values(1111121, 1000031, 3, null, null, null, 101, "apto");
insert into Pruebas values(1111121, 1000034, 4, null, null, null, 101, "apto");
insert into Pruebas values(1111121, 1000035, 5, null, null, null, 101, "no apto");
insert into Pruebas values(1111121, 1000037, 6, null, null, null, 101, "apto");
insert into Pruebas values(1111122, 1000038, 1, null, null, null, 110, "no apto");
insert into Pruebas values(1111122, 1000039, 2, null, null, null, 110, "no apto");
insert into Pruebas values(1111122, 1000040, 3, null, null, null, 110, "no apto");
insert into Pruebas values(1111122, 1000041, 4, null, null, null, 110, "apto");
insert into Pruebas values(1111122, 1000042, 5, null, null, null, 110, "apto");
insert into Pruebas values(1111122, 1000043, 6, null, null, null, 110, "apto");
insert into Pruebas values(1111122, 1000044, 7, null, null, null, 110, "no apto");
insert into Pruebas values(1111122, 1000045, 8, null, null, null, 110, "no apto");
insert into Pruebas values(1111122, 1000046, 9, null, null, null, 110, "apto");
insert into Pruebas values(1111122, 1000047, 10, null, null, null, 110, "apto");
insert into Pruebas values(1111122, 1000048, 11, null, null, null, 110, "no apto");
insert into Pruebas values(1111122, 1000049, 12, null, null, null, 110, "apto");
insert into Pruebas values(1111122, 1000050, 13, null, null, null, 110, "apto");
insert into Pruebas values(1111123, 1000041, 1, null, null, null, 101, "no apto");
insert into Pruebas values(1111123, 1000042, 2, null, null, null, 101, "no apto");
insert into Pruebas values(1111123, 1000043, 3, null, null, null, 101, "apto");
insert into Pruebas values(1111123, 1000046, 4, null, null, null, 101, "apto");
insert into Pruebas values(1111123, 1000047, 5, null, null, null, 101, "no apto");
insert into Pruebas values(1111123, 1000049, 6, null, null, null, 101, "apto");
insert into Pruebas values(1111123, 1000050, 7, null, null, null, 101, "no apto");
-- Se consideraron nulas las fechas de realizacin y sus respectivas horas porque, por el momento,
basta con mencionar que estos campos forman parte de una restriccin UNIQUE y que por lo tanto,
no habr cruce de horarios.
3. Creacin de vistas:
/***********CREACION DE VISTAS***********/
CREATE VIEW castings_clientes AS
SELECT idCliente, NomCli, IdCasting,
FechaContratacion,
FechaInicio FROM Cliente NATURAL JOIN Castings;
NombreCasting,
) NATURAL JOIN (
SELECT idcasting, COUNT(DISTINCT idfase) AS fases,
COUNT(DISTINCT idcandidato) AS candidatos
FROM pruebas NATURAL JOIN fase GROUP BY idcasting)
ORDER BY IdCasting;
CREATE VIEW calificados_por_casting AS
SELECT idcasting, idfase, aprobados from (
SELECT idcasting, max(idfase) AS idfase from fase GROUP BY
idcasting
) NATURAL JOIN (
SELECT idfase, count(idcandidato) AS aprobados FROM pruebas
WHERE estadoprueba='apto' GROUP BY idfase)
ORDER BY idcasting;
CREATE VIEW agentes_camarografos AS
SELECT DISTINCT * FROM (
SELECT idcasting, idagente, nombreempleado AS nombreagente
FROM castings c, empleado e WHERE c.idagente = e.idempleado
) natural JOIN (
SELECT
idcasting,
idcamarografo,
nombreempleado
AS
nombrecamarografo
FROM
camarografo_casting
cc,
empleado
e
WHERE
cc.idcamarografo=e.idempleado)
ORDER BY idcasting;
CREATE VIEW cantidad_usos_salas AS
SELECT * FROM (
SELECT idsala, nombresala FROM sala
) NATURAL JOIN (
SELECT idsala, count(idcandidato) AS enpruebas, count(DISTINCT
idfase) AS enfases,
count(DISTINCT idcasting) AS encastings FROM sala natural JOIN (
SELECT idcasting, idfase, idcandidato, idsala FROM pruebas natural
JOIN fase)
GROUP BY idsala ORDER BY idsala);
CREATE VIEW detalles_castings AS
SELECT * FROM candidatos_y_fases_castings NATURAL JOIN
calificados_por_casting;
END LOOP;
END;
5. Creacin de Cursores:
--Cursor para visualizar los candidatos que aprobaron por lo menos 1
prueba
DECLARE
CURSOR c_aptos_primera IS
SELECT idcandidato, NombreCandidato FROM candidato NATURAL
JOIN(
SELECT idcandidato FROM pruebas WHERE idfase IN (
SELECT MIN(idfase) FROM fase group by idcasting)
AND estadoprueba='apto');
r_candidatos candidato%ROWTYPE;
BEGIN
DBMS_OUTPUT.PUT_LINE('Candidatos que aprobaron al menos una
prueba:');
OPEN c_aptos_primera
FETCH c_aptos_primera INTO r_candidatos;
DBMS_OUTPUT.PUT_LINE(r_candidatos.IdCandidato||' '||
r_candidatos);
END;
--Cursores que recorran las VISTAS
DECLARE
CURSOR c_castings_clientes IS
SELECT nombrecliente, COUNT(idcasting) AS numero_castings
FROM agentes_camarografos GROUP BY idCliente;
CURSOR c_cantidad_usos_salas IS SELECT * FROM
cantidad_usos_salas;
CURSOR c_detalles_castings IS SELECT * FROM detalles_castings;
r_1 castings_clientes%ROWTYPE;
r_3 cantidad_usos_salas%ROWTYPE;
r_4 c_detalles_castings%ROWTYPE;
BEGIN
DBMS_OUTPUT.PUT_LINE('Numero de castings contratados por cada
cliente:');
OPEN c_castings_clientes;
FETCH c_castings_clientes IN r_1;
DBMS_OUTPUT.PUT_LINE(r_1.nombrecliente||'
-->
'||
r_1.numero_castings);
CLOSE c_castings_clientes;
6. Creacin de Triggers:
-- Triggers para agragacion de identificador automatico (similar a una
secuencia)
CREATE OR REPLACE TRIGGER new_id_casting
BEFORE INSERT ON castings FOR EACH ROW
DECLARE new_id NUMBER;
BEGIN
SELECT MAX(idcasting) INTO new_id FROM castings;
:NEW.IdCasting:= new_id+1;
END;
CREATE OR REPLACE TRIGGER new_id_fase
BEFORE INSERT ON fase FOR EACH ROW
DECLARE new_id NUMBER;
BEGIN
SELECT MAX(idfase) INTO new_id FROM fase;
:NEW.idfase:= new_id+1;
END;
CREATE OR REPLACE TRIGGER new_id_candidato
BEFORE INSERT ON candidato FOR EACH ROW
DECLARE new_id NUMBER;
BEGIN
SELECT MAX(idcandidato) INTO new_id FROM candidato;
:NEW.idcandidato:= new_id+1;
END;
CREATE OR REPLACE TRIGGER new_id_cliente
BEFORE INSERT ON cliente FOR EACH ROW
DECLARE new_id NUMBER;
BEGIN
SELECT MAX(idcliente) INTO new_id FROM cliente;
:NEW.idcliente:= new_id+1;
END;