Você está na página 1de 5

Nombre: Cervantes Suarez Carlos Andres Curso: S5A Materia: Base de Datos II PRIMER PAQUETE: CON DOS PROCEDIMIENTOS

Y DOS FUNCIONES, UN PROCEDIMIENTO QUE TIENE COMO PARAMETRO DE ENTRADA UN NOMBRE DE DEPARTAMENTO Y SU RESPECTIVA LOCALIDAD Y DEBERA DEVOLVER EL NOMBRE EL EMPLEADO QUE MAS GANA CUAL ES SU SALARIO Y SU APORTACION AL IESS, UNA FUNCION QUE INGRESE COMO PARAMETRO UN AO Y EL NOMBRE DE UN CLIENTE Y DEVUELVA LA SUMA DE LOS TOTALES ORDENADOS EN ESE AO, UN PROCEDIMIENTO QUE RECIBA DE PARAMETRO EL NOMBRE DE UN CLIENTE SI SU LIMITE DE CREDITO ES SUPERIOR A 5000, INCREMENTARLE ESTE LIMITE EN UN 10% CASO CONTRARIO INCREMENTARLE UN 20%, EL PROCEDIMIENTO DEVOLVERA EL NUEVO VALOR DEL LIMITE DE CREDITO, 1 FUNCION QUE RECIBA DE PARAMETRO UNA FECHA ANTERIOR Y ME DEVUELVA UNA CADENA DE CARACTERES LOS MESES, SEMANAS DIAS QUE HAN TRANSCURRIDO HASTA EL DIA DE HOY. create or replace package paquete1 is procedure mas_gana(departamento in varchar2, localidad in varchar2, p_apellido_mas out varchar2, s_mas out number, mas_aport out number); function anio(cliente in varchar2, anio in number)return number; procedure limite_credito(p_nombre in varchar2, p_credito out number); function tiempo(fecha in date) return varchar2; end; create or replace package body paquete1 is procedure mas_gana(departamento in varchar2, localidad in varchar2, p_apellido_mas out varchar2, s_mas out number, mas_aport out number) is begin select e.last_name, e.salary into p_apellido_mas, s_mas from employee e, location l, department d where e.department_id = d.department_id and d.location_id = l.location_id and l.regional_group = localidad and d.name = departamento and e.salary = (select MAX(e.salary) from employee e, location l, department d where e.department_id = d.department_id and d.location_id = l.location_id and l.regional_group = localidad and d.name = departamento) AND ROWNUM <= 1; mas_aport := (s_mas * 9.35)/100; end; function anio(cliente in varchar2, anio in number) return number is total number; begin select sum(s.total) into total

from sales_order s, customer c where s.customer_id = c.customer_id and c.name = (select c.name from customer where c.name = cliente) and s.order_date = (select s.order_date from sales_order where TO_CHAR(s.order_date,'YYYY') = anio); return total; end; procedure limite_credito(p_nombre in varchar2, p_credito out number) is begin select c.credit_limit into p_credito from customer c where c.name = p_nombre; if(p_credito > 5000)then p_credito := p_credito + (p_credito * 0.10/100); else p_credito := p_credito + (p_credito * 0.20/100); end if; end; function tiempo(fecha in date) return varchar2 is dif_fecha varchar2(50); begin SELECT ROUND ((SYSDATE-FECHA)/30,0) || ' MESES ' || ROUND ((SYSDATEFECHA)/7,0)||' SEMANAS ' || ROUND ((SYSDATE-FECHA)/365,0)||' DIA/S ' INTO DIF_FECHA FROM DUAL; return dif_fecha ; end; end;

SEGUNDO PAQUETE: UN PROCEDIMIENTO QUE TENDRA COMO PARAMETRO DE ENTRADA UN NOMBRE DE UN DEPARTAMENTO Y SU RESPECTIVA LOCALIDAD Y DEBERA DEVOLVER EL NOMBRE DEL EMPLEADO QUE MENOS GANA CUAL ES SU SALARIO Y SU APORTACION AL IESS, 1 FUNCION QUE RECIBA DE ENTRADA EL NOMBRE DE UN PRODUCTO Y RETORNE LAS CANTIDADES ORDENADAS DE ESE PRODUCTO, 1 FUNCION QUE RECIBA DE ENTRADA EL NOMBRE DE UN PRODUCTO Y RETORNE EL PRECIO DE ESE PRODUCTO, UN PROCEDIMIENTO QUE TENDRA COMO PARAMETRO DE ENTRADA UN NOMBRE DE UN EMPLEADO Y DEBERA DEVOLVER SU SALARIO Y SU APORTACION AL IESS. create or replace package paquete2 is procedure menos_gana(departamento in varchar2, localidad in varchar2, p_apellido_menos out varchar2, s_menos out number, menos_aport out number); function cantidades(p_producto in varchar2)return number; function precio(p_producto in varchar2)return number; procedure salario(p_apellido in varchar2, p_salario out numeric, p_aportacion out numeric);

end; create or replace package body paquete2 is procedure menos_gana(departamento in varchar2, localidad in varchar2, p_apellido_menos out varchar2, s_menos out number, menos_aport out number) is begin select e.last_name, e.salary into p_apellido_menos, s_menos from employee e, location l, department d where e.department_id = d.department_id and d.location_id = l.location_id and l.regional_group = localidad and d.name = departamento and e.salary = (select MIN(e.salary) from employee e, location l, department d where e.department_id = d.department_id and d.location_id = l.location_id and l.regional_group = localidad and d.name = departamento) AND ROWNUM <= 1; menos_aport := (s_menos * 9.35)/100; end; function cantidades(p_producto in varchar2) return number is v_cantidad number; begin SELECT SUM(IT.QUANTITY) into v_cantidad FROM PRODUCT PR, ITEM IT WHERE PR.PRODUCT_ID = IT.PRODUCT_ID AND PR.DESCRIPTION = p_producto; return v_cantidad ; end; function precio(p_producto in varchar2) return number is v_precio number; begin SELECT PR.LIST_PRICE INTO v_precio FROM PRODUCT P, PRICE PR WHERE P.PRODUCT_ID = PR.PRODUCT_ID AND P.DESCRIPTION = p_producto AND PR.END_DATE IS NULL; return v_precio; end; procedure salario(p_apellido in varchar2, p_salario out numeric, p_aportacion out numeric) is

begin select e.salary into p_salario from employee e where e.last_name = p_apellido; p_aportacion := (p_salario * 9.35)/100; end; end; TERCER PAQUETE: UN PROCEDIMIENTO QUE RECIBA COMO PARAMETRO EL NOMBRE DE UN EMPLEADO Y DEVUELVA SU APELLIDO, SU SALARIO EL NOMBRE DE CARGO. UN PROCEDIMIENTO QUE RECIBE COMO PARAMETRO EL NOMBRE DE UN EMPLEADO Y CALCULA EL 15% DE SU SALARIO MOSTRAR EL SALRIO MENOS EL 15%. UN PROCEDIMIENTO QUE RECUPERA EL CREDITO LIMITE DE UN CLIENTE, CALCULA EL 20% SI ESTA ES MAYOR A $5 MOSTRARA EN PANTALLA NOMBRE DEL CLIENTE Y EL 20% DEL CREDITO CONTRARIO INGRESARA UNA NUEVA TABLA (ID, CIUDAD, DIRECCION, PORCENTAJE). CALCULAR EL 25% DEL LIMITE DE CREDITO DE UN CLIENTE create or replace package paquete3 is procedure d_empleado(p_nombre in varchar2, p_apellido out varchar2, p_salario out number, p_cargo out varchar2); procedure restar_salario(p_nombre in varchar2); procedure cliente(c_nombre in varchar2); function cliente_credito(c_nombre IN VARCHAR2)RETURN NUMBER; end; create or replace package body paquete3 is procedure d_empleado(p_nombre in varchar2, p_apellido out varchar2, p_salario out number, p_cargo out varchar2) is begin select e.last_name, e.salary, j.function into p_apellido, p_salario, p_cargo from employee e, job j where e.job_id = j.job_id and e.first_name = p_nombre; end; procedure restar_salario(p_nombre in varchar2) is V_NOMBRE VARCHAR2(50); V_APELLIDO VARCHAR2(50); V_SALARIO NUMBER; nuevo_valor NUMBER; begin SELECT E.FIRST_NAME, E.LAST_NAME, E.SALARY INTO V_NOMBRE, V_APELLIDO, V_SALARIO FROM EMPLOYEE E WHERE E.FIRST_NAME = p_nombre; nuevo_valor := V_SALARIO - (V_SALARIO * 0.15); DBMS_OUTPUT.PUT_LINE(V_SALARIO|| ' ---- '|| nuevo_valor); end; procedure cliente(c_nombre in varchar2) is

ciudad VARCHAR2(50); direccion VARCHAR2(50); credito NUMBER; credito_aumento NUMBER; BEGIN SELECT c.city , c.address, c.credit_limit INTO ciudad, direccion, credito FROM customer c WHERE c.name = c_nombre; credito_aumento := (credito * 0.20); IF credito_aumento > 5 THEN DBMS_OUTPUT.PUT_LINE(credito|| ' ---- '||credito_aumento); ELSE INSERT INTO DATOS VALUES(SEQ_D.NEXTVAL,ciudad,direccion,credito_aumento); COMMIT; END IF; END; FUNCTION cliente_credito(c_nombre IN VARCHAR2)RETURN NUMBER IS V_CREDITO NUMBER; VALOR_MAS NUMBER; BEGIN SELECT C.CREDIT_LIMIT INTO V_CREDITO FROM CUSTOMER C WHERE C.NAME = c_nombre; VALOR_MAS := V_CREDITO + (V_CREDITO * 0.25); RETURN VALOR_MAS; END; end;

Você também pode gostar