Está en la página 1de 5

EXAMEN PARCIAL DE BASE DE DATOS II

Duración: 90 minutos

APELLIDO PATERNO GRUPO 7 SEMESTRE 2023-0


APELLIDO MATERNO GRUPO 7
NOMBRES GRUPO 7 CICLO V
DOCENTE ING. HUGO VILLAVERDE MEDRANO FECHA 10 02 2023

Instrucciones:
● Se recomienda mantener la correcta redacción y orden.

● Entregar en formato WORD.

TIPO 1: PARA NUMEROS IMPARES

Considerando el esquema HR, desarrollar lo siguiente:

1. Elabore una Funcion (FN) que permita calcular la edad de un empleado, considerar el campo
HR.EMPLOYEES.HIRE_DATE como la Fecha de Nacimiento. (5 ptos.)

Script SQL
--PRIMERO EN EL ESQUEMA HR
GRANT select, insert, update, delete ON hr.employees TO ysaac;

--LUEGO EN NUESTRA PROPIA BASE DE DATOS


CREATE OR REPLACE FUNCTION calculo_edad (p_hire_date DATE)
RETURN NUMBER
AS
v_edad NUMBER;
BEGIN
v_edad := TRUNC(MONTHS_BETWEEN(SYSDATE,p_hire_date)/12);
RETURN v_edad;
END;

--EJECUTAR LA FUNCION
SELECT * FROM HR.EMPLOYEES

SELECT FIRST_NAME,LAST_NAME,HIRE_DATE,calculo_edad(hire_date) AS edad


FROM hr.employees
WHERE hr.employees.employee_id=123;
End;
Imagen del resulado

2. Elabore un Procedimiento Almacenado (SP), que actualice la edad de cada empleado utilizando la FUNCIÓN
CREADA PREVIAMENTE agregue un nuevo campo llamado EDAD_EMP A LA TABLA EMPLOYEES y, también,
debe actualizar el campo COMMISSION_PCT para todos los que estan en NULL, esto debe ser el promedio de
todas las comisiones. (10 ptos.)
Script SQL

-- Añadimos el campo EDAD_EMP


ALTER TABLE HR.EMPLOYEES ADD EDAD_EMP INT;

-- Creamos el Procedimiento
CREATE OR REPLACE PROCEDURE sp_update_employee_dates
IS
V_COMISION FLOAT;
BEGIN
--calculamos el promedio de comisiones
SELECT AVG(COMMISSION_PCT)
INTO V_COMISION
FROM HR.EMPLOYEES
WHERE COMMISSION_PCT IS NOT NULL;

--Actualizamos la edad de los empleados


UPDATE HR.EMPLOYEES
SET EDAD_EMP = calculo_edad(HIRE_DATE),
COMMISSION_PCT = NVL(COMMISSION_PCT, V_COMISION);
END;
3. Explique en qué consiste el PGA en la arquitectura de Oracle. (2 ptos.)

El PGA (Program Global Area) es una porción de la memoria RAM que se asigna a cada sesión o
proceso en Oracle. Es un área de trabajo que se utiliza para almacenar información relacionada
con la ejecución de sentencias y procedimientos.Nos permite un mejor control y gestión de la
memoria RAM y además un mejor rendimiento en la ejecución tanto de sentencias como de
procedimientos.

Su tamaño es dinámico y se ajusta automáticamente en función a la memoria disponible y la


actividad de la sesión.

Es un componente importante que se encuentra entre el SGA (System Global Area) y la memoria
RAM. El SGA es una estructura de memoria compartida que se utiliza para almacenar información
que es accedida por todas las sesiones, como datos de catálogo y tablas.

4. Elabore un reporte con los siguientes campos: CODIGO_EMP, NOMBRE_APE_EMP, CARGO_EMP,


SALARIO_EMP+COMISION, NOMBRE_JEFE, CARGO_JEFE, REGION_JEFE. (3 ptos.)

Para cada respuesta, copie el script y capute una imagen del resultado, debe estar conectado con su
propio usuario.

Script SQL
--vista de tablas
select * from hr.employees
select * from hr.jobs
select * from hr.countries
select *from hr.locations
select * from hr.departments
select * from hr.regions
--vista de campos

select
E1.employee_id CODIGO_EMP,
E1.first_name||' '||E1.last_name NOMBRE_APE_EMP,
J1.job_title CARGO_EMP,
E1.salary+ nvl(E1.commission_pct, 0) "SALARIO_EMP+COMISION",
E2.first_name||' '||E2.last_name NOMBRE_JEFE,
J2.job_title CARGO_JEFE,
R.region_name REGION_JEFE
--Tabla de empleados por primer vez hacemos join con la tabla Jobs: E1 y J1
from HR.EMPLOYEES E1
join HR.JOBS J1
on E1.job_id=J1.job_id

--Se llama a la tabla de empleados por segunda vez: E2


join HR.EMPLOYEES E2S
on E2.employee_id=E1.manager_id

--Se llama a la tabla Jobs por segunda vez: J2


join HR.JOBS J2
on J2.job_id=E2.job_id

--Se tiene que llamar a la tabla de departamentos, locaciones, paises y región: D,L,C y R
join HR.DEPARTMENTS D
on D.department_id=E2.department_id
join HR.LOCATIONS L
on L.location_id=D.location_id

join HR.COUNTRIES C
on C.country_id=L.country_id

join HR.REGIONS R
on R.region_id=C.region_id
where E1.manager_id is not null;

Imagen del resulado

También podría gustarte