Está en la página 1de 11

PARCIAL FINAL DE BASES DE DATOS I

PROFESOR AMILKAR SIERRA ROMANO


DIC 14 DE 2020

1) Desarrolle el esquema físico de bases de datos Oracle 18c para los requerimientos
explicados en el punto, tenga en cuenta lo siguiente.
NOTA: DEBE CREAR ESQUEMA CON EL USUARIO1 Y ADMINISTRALO CON EL USUARIO2, ES
DECIR INSERTAR, ACTUALIZAR REGISTROS, EJECUTAR PROCEDURES/FUNCIONES ETC.
NO CREAR LLAVES PRIMARIAS NI FORANEAS.

a) Crear TABLESPACE
b) ROL
c) Sinónimos
d) Usuarios (usuario1 y Usuario2)
e) Secuencias
f) Procedures

2) Insertar datos usuando PL/SQL. NOTA: AL MOMENTO DE INSERTAR REGISTROS VERIFICAR


EN LA MISMO PLSQL LA NO EXISTENCIA DEL CODIGO NUEVO EN LA TABLA.
b) CUANDO VAYA A INSERTAR UNA FORANEA HACE LA VERIFICACION DE LA INTEGRIDAD
REFERENCIAL A EN MISMO PLSQL. LAS FONAEAS VAN EN PROGRAMAS, ALUMNOS.
c) Muestre cuantos alumnos tiene cada etnia, recorra e imprima cursor.
d) Mantenga la integridad de los datos para cuando cambie el la tabla FACULTAD, el
código de facultad 01 por el código 99, que este cambio se vea reflejado en la tabla
programas(use trigger para resolver el problema)

NOTA:
a) TIEMPPO DEL PARCIAL TRES (3) HORAS. EMPIEZA A LAS 4PM Y TERMINA A LAS 7PM
b) Enviar doc y video sustentando punto por punto del parcial. MOSTRAR CAMARA
c) Ver diamagar de DIA ANEXO PARA DESARROLLAR EL PARCIAL
EXITOS

CREACION DE LA TABLE SPACE Y SUS ROLES Y USUARIOS

CREATE TABLESPACE PARCIAL3 DATAFILE


'C:\app\sebas\product\18.0.0\oradata\XE\XEPDB1\PARCIAL3.ora' SIZE 100M;

CREATE USER USUARIO1 IDENTIFIED BY USUARIO1 DEFAULT TABLESPACE PARCIAL3;

CREATE USER USUARIO2 IDENTIFIED BY USUARIO2 DEFAULT TABLESPACE PARCIAL3;

GRANT EXECUTE ANY PROCEDURE TO USUARIO2;

GRANT UNLIMITED TABLESPACE TO USUARIO2;

GRANT DBA TO USUARIO2;

GRANT roladmin TO USUARIO1 with admin option ;

GRANT consulta TO USUARIO2;

GRANT CREATE SESSION, CREATE TABLE, CREATE PROCEDURE, CREATE SEQUENCE,

CREATE SYNONYM, CREATE JOB, CREATE PUBLIC SYNONYM, INSERT ANY TABLE,

UPDATE ANY TABLE,CONNECT, SELECT ANY TABLE,DROP ANY TABLE,DROP ANY PROCEDURE,

DROP ANY SEQUENCE , CREATE ANY TRIGGER, DROP ANY TRIGGER

TO roladmin;

COMMIT;
CREATE ROLE consulta;

GRANT INSERT ANY TABLE, CREATE SESSION, SELECT ANY TABLE, ALTER SESSION, CREATE
SYNONYM, CREATE SEQUENCE TO consulta;

CREACION DEL ESQUEMA CON EL USUARIO 1

CREATE TABLE alumno(cedula VARCHAR2(11) NOT NULL, primer_nombre VARCHAR2(20) NOT


NULL, segundo_nombre VARCHAR2(20), primer_apellido VARCHAR2(20) NOT NULL,
segundo_apellido VARCHAR2(20),

etnia VARCHAR2(4),ciudad VARCHAR2(4),programa VARCHAR2(4));

CREATE TABLE ciudades(ciudad_id VARCHAR2(4),ciudad_nombre VARCHAR2(20),poblacion


NUMBER(10));

CREATE TABLE departamentos(depart_id VARCHAR2(4),depart_nombre VARCHAR2(20),poblacion


NUMBER(10));

CREATE TABLE etnia(etnia_id VARCHAR2(4),etnia_nombre VARCHAR2(20),poblacion


NUMBER(10));

CREATE TABLE programa(programa_id VARCHAR2(4),programa_nombre


VARCHAR2(20),codFacultad VARCHAR2(4));

CREATE TABLE facultades(facultad_id VARCHAR2(4), facultad_nombre VARCHAR2(50));

CREATE SYNONYM alumno FOR USUARIO1.alumno;

CREATE SYNONYM ciudad FOR USUARIO1.ciudaes;

CREATE SYNONYM departamento FOR USUARIO1.departamentos;

CREATE SYNONYM etnias FOR USUARIO1.etnia;

CREATE SYNONYM programas FOR USUARIO1.programa;

CREATE SYNONYM faculta FOR USUARIO1.facultades;


CREATE SYNONYM insertar_estudiante FOR usuario1.insertar_ciudades;

CREATE SEQUENCE sec_ciudad

START WITH 1

INCREMENT BY 1

NOCYCLE

CREATE SEQUENCE sec_departamento

START WITH 1

INCREMENT BY 1

NOCYCLE

CREATE SEQUENCE sec_etnia

START WITH 1

INCREMENT BY 1

NOCYCLE

CREATE SEQUENCE sec_programa

START WITH 1

INCREMENT BY 1

NOCYCLE

CREATE SEQUENCE sec_facultad

START WITH 1

INCREMENT BY 1

NOCYCLE
;

CREATE SYNONYM insertar_programas FOR usuario1.insertar_programa;

SET SERVEROUT ON;

CREATE OR REPLACE PROCEDURE insertar_alumno(v_ced IN VARCHAR2, v_nom1 IN VARCHAR2,


v_nom2 IN VARCHAR2, v_ape1 IN VARCHAR2, v_ape2 IN VARCHAR2, v_etnia IN NUMBER,
v_ciudad IN NUMBER, v_programa IN NUMBER)

IS

v_cont NUMBER := 0;

CURSOR v_alum IS SELECT * FROM alumno;

CURSOR v_etn IS SELECT * FROM etnia;

CURSOR v_ciu IS SELECT * FROM ciudades;

CURSOR v_pro IS SELECT * FROM programa;

BEGIN

FOR I IN v_alum LOOP

IF I.cedula != v_ced THEN

v_cont := 1;

END IF;

END LOOP;

FOR I IN v_etn LOOP

IF I.etnia_id = v_etnia THEN

v_cont := 2;

END IF;

END LOOP;

FOR I IN v_ciu LOOP


IF I.ciudad_id = v_ciudad THEN

v_cont := 3;

END IF;

END LOOP;

FOR I IN v_pro LOOP

IF I.programa_id = v_programa THEN

v_cont := 4;

END IF;

END LOOP;

IF v_cont = 4 THEN

INSERT INTO
alumno(cedula,primer_nombre,segundo_nombre,primer_apellido,segundo_apellido,etnia,ciudad,
programa)

VALUES(v_ced,v_nom1,v_nom2,v_ape1,v_ape2,v_etnia,v_ciudad,v_programa);

END IF;

IF v_cont != 4 THEN

DBMS_OUTPUT.PUT_LINE('No Se Puede Guardar Debido A Integridad Referencial Nula');

END IF;

END insertar_alumno;

CREATE OR REPLACE PROCEDURE insertar_ciudades(v_nombre IN VARCHAR2, v_poblacion IN


NUMBER)

IS
v_cont NUMBER:=0;

CURSOR v_ciu IS SELECT * FROM ciudades;

BEGIN

FOR I IN v_ciu LOOP

IF I.ciudad_nombre != v_nombre THEN

INSERT INTO ciudades(ciudad_id,ciudad_nombre,poblacion)

VALUES(sec_ciudad.nextval,v_nombre,v_poblacion);

v_cont := 1;

END IF;

END LOOP;

IF v_cont = 0 THEN

DBMS_OUTPUT.PUT_LINE('La Ciudad Ya Existe');

END IF;

END;

CREATE OR REPLACE PROCEDURE insertar_departamentos(v_nombre IN VARCHAR2, v_poblacion


IN NUMBER)

IS

v_cont NUMBER:=0;

CURSOR v_depar IS SELECT * FROM departamentos;

BEGIN

FOR I IN v_depar LOOP

IF I.depart_nombre != v_nombre THEN

INSERT INTO departamentos(depart_id,depart_nombre,poblacion)

VALUES(sec_departamento.nextval,v_nombre,v_poblacion);
v_cont := 1;

END IF;

END LOOP;

IF v_cont = 0 THEN

DBMS_OUTPUT.PUT_LINE('El Departamento Ya Existe');

END IF;

END;

CREATE OR REPLACE PROCEDURE insertar_etnia(v_nombre IN VARCHAR2, v_poblacion IN


NUMBER)

IS

v_cont NUMBER:=0;

CURSOR v_etnia IS SELECT * FROM etnia;

BEGIN

FOR I IN v_etnia LOOP

IF I.etnia_nombre != v_nombre THEN

v_cont := 1;

END IF;

END LOOP;

IF v_cont = 1 THEN

INSERT INTO etnia(etnia_id,etnia_nombre,poblacion)

VALUES(sec_etnia.nextval,v_nombre,v_poblacion);

END IF;
IF v_cont = 0 THEN

DBMS_OUTPUT.PUT_LINE('La Etnia Ya Existe');

END IF;

END;

CREATE OR REPLACE PROCEDURE insertar_facultad(v_nombre IN VARCHAR2)

IS

v_cont NUMBER :=0;

CURSOR v_facul IS SELECT * FROM facultades;

BEGIN

FOR I IN v_facul LOOP

IF I.facultad_nombre != v_nombre THEN

INSERT INTO facultades(facultad_id,facultad_nombre)

VALUES(sec_etnia.nextval,v_nombre);

v_cont := 1;

END IF;

END LOOP;

IF v_cont = 0 THEN

DBMS_OUTPUT.PUT_LINE('La Facultad Ya Existe');

END IF;

END;

CREATE OR REPLACE PROCEDURE insertar_programa(v_nombre IN VARCHAR2, v_facultad IN


NUMBER)

IS
v_cont NUMBER :=0;

CURSOR v_pro IS SELECT * FROM programa;

BEGIN

FOR I IN v_pro LOOP

IF I.programa_nombre != v_nombre THEN

INSERT INTO programa(programa_id,programa_nombre,codfacultad)

VALUES(sec_etnia.nextval,v_nombre,v_facultad);

v_cont := 1;

END IF;

END LOOP;

IF v_cont = 0 THEN

DBMS_OUTPUT.PUT_LINE('El Prorama Ya Existe');

END IF;

END;

CREATE OR REPLACE PROCEDURE alumnos_por_etnia

IS

CURSOR v_cont IS SELECT COUNT(a.cedula) FROM alumno a WHERE a.etnia IS NOT NULL;

BEGIN

FOR I IN v_cont LOOP

DBMS_OUTPUT.PUT_LINE('Cedula: '||I.cedula);

END LOOP;

END;

COMMIT;
USUARIO 2

select * from USUARIO1.alumno;

select * from USUARIO1.programa;

select * from USUARIO1.etnia;

COMMIT;

EXECUTE USUARIO1.insertar_alumno('1003231609','sebastian','','quintero','angel','1','1','1');

EXECUTE USUARIO1.insertar_etnia('AFRODECENDIENTE',5000);

EXECUTE USUARIO1.insertar_ciudades('VALLEDUPAR',50000000);

EXECUTE USUARIO1.insertar_departamentos('CESAR',20000);

EXECUTE USUARIO1.insertar_facultad('INGENIERIA Y TECNOLOGIA');

EXECUTE usuario1.insertar_programa('INGENIERIA DE SISTEMAS',1);

También podría gustarte