Está en la página 1de 6

Nombre

Procedimientos

---crear un procedimiento donde muestre los nombres de los gerentes y el nombre de cada departamento
donde estan encargados

create or replace procedure depart is


begin
for i in(select nom_depta,cod_de,gerente_cod from departamento3 where gerente_cod is not null) loop
dbms_output.put_line('***********************************');
dbms_output.put_line('Departamento: '||i.nom_depta);
for j in(select nomb_emple from emplea where cod_de=i.cod_de
and cod_em=i.gerente_cod) loop
dbms_output.put_line('Jefe: '||j.nomb_emple);
end loop;
end loop;
end;

exec depart;

----2 crear un procedimiento dado el numero de departamento nos mostrara el nombre del
departamento

create or replace procedure nom_depart(v_cod in number)


as
v_nom departamento3.nom_depta%type;
begin
select nom_depta into v_nom from departamento3 where cod_de=v_cod;
dbms_output.put_line(v_nom);
end;
/

exec nom_depart(10);

--- 3 crear un procedimiento que muestre los empleados que su salario igual o superior a 8000
create or replace procedure lista
is
begin
for i in (select cod_em, nomb_emple
from emplea
where salario>=8000 )
loop

dbms_output.put_line (i.nomb_emple);
end loop;

end;

exec lista ;

--- 4 crear un procedimiento donde muestre los empleados que trabajan en el departamento de finanzas

create or replace procedure departamentos


is

begin
for i in (SELECT cod_em ,nomb_emple ,nom_depta

FROM emplea E JOIN departamento3 D

ON E.COD_DE =D.COD_DE

where nom_depta='finanzas' )

loop

dbms_output.put_line ('nombre ' || ' :' ||i.nomb_emple || ' :' ||'departamento ' || ' :' ||i.nom_depta);

end loop;

end;

exec departamentos

---5 crear un procedimiento que se reciba como parametros de entrada el numero de departamentoy se
muestre la cantidad de empleados que trabajan en el departamento

create or replace procedure p_cant


(depno emplea.cod_de %type, cant out int )
is begin
select count (*) into cant
from emplea
where cod_de=depno;
end;

declare
v_depno emplea.cod_de%type:=&depid;
v_cant int;
begin
p_cant (v_depno, v_cant);
dbms_output.put_line ('Depto:' || ' :' ||' total de empleados: ' || v_cant );
end;

---6
create
or replace procedure Todayls
as
begin dbms_output.put_line ('hoy es '|| to_char (Sysdate , 'DD/MM/YYYY'));
end Todayls;

create or replace procedure precio


as begin
insert into lactios
select *
from lactios
where fecha_alta >='01/012011' and
fecha_alta < to_date(Sysdate);
exception
when others then
dbms_output.put_line ('error de exception favor validar');
end;
---7
create or replace procedure ingresar (codigo int, nombre varchar2)
is
begin
insert into regions values (codigo, nombre);
exception when others then
dbms_output.put_line (solerrm);
end sp_ingresar_region;

--8

----crear un procedimeinto que reciba como parametro de entrada el id del empleado y muestre los
datos del empleado
---el nombre, apellido año de contratacion, si el id del empleado no existe mostrar "no existe el
empledo"
create or replace busca_emp (idemp emplea.cod_em%type) is
v_nom varchar2 (50);
v_sal emplea.salario%type;
v_fecha emplea.fecha_contr
begin
select nomb_emple || ' :' ||apell_empl, salario, fecha_contr into v_nom, v_sal, v_fecha
from emplea
where cod_em =i.demp;
dbms_output.put_line ('Id:' || idemp || chr(10) || 'fecha concemtracion:' || v_fecha);
exception
when no_data_found then
dbms_output.put_line ('no existe el empleado');
end;

exec busca_emp (&idemp);

Funciones
----- 1 crear una funcion donde califique los salarios de los empleados si esta en rango de
--2000 a 4000 deb mostrar salario medio
--4000 a 8000 debe mostrar salario bueno
--- 9000 a 10000 debe mostrar salario muy bueno

create or replace function sal


p_sal emplea.salario%type;
return varchar is
begin
case
when p_sal between 2000 and 4000 then
return 'salario medio ';
when p_sal between 4000 and 8000 then
return 'salario bueno ' ;
when p_sal between 9000 and 10000 then
return 'salario muy bueno';
end case;
end;

select c_sal (7000)


from dual;

2 crear un funcion que reciba parametro de entrada el codigo donde el grupo que pertenece el
producto y que nos devuelva
---si el grupo esta en uso sera "con producto " y si el gurpo no tiene nada de producto dira "sin
producto"
create or replace function cal_pro(
depno verpro.cod_ar%type
) return varchar2 is
v_c int;
begin
select count(*) into v_c
from verpro
where cod_ar=depno;
if v_c>0 then
return 'con producto ';
else
return 'sin producto ';
end if ;
end;

select cal_pro(10) from dual;

--- 3 crear una funcion dado el codigo del proveedor nos muestre el nombre del proveedo y el producto
que se adquirio
create or replace function de_pro (
cod_prove number)
return varchar2
is
v_re varchar2(40);
begin
select nom_pro || ' ' || nombre_producto into v_re
from pro
where cod_prov=cod_prove;
return v_re;
end de_pro;

select de_pro (424) from dual;

----4 crear una funcion donde se aumente los precios de los productos en un 20 %
create or replace function incremento (v_pre number)
return number
is
begin
return v_pre+(v_pre*0.2);
end;

select nomb, precios, incremento (precios) from verpro;


----5 crear una funcion dado el codigo del empleado se muestre el nombre del empleado y el
departamento donde trabaja

create or replace function nom_depar(


cod_emp number)
return varchar2
is
nomdep varchar2(40);
begin
select nomb_emple|| ' ' || nom_depta into nomdep
from emplea e join departamento3 d on e.COD_DE = d.COD_DE
where cod_em= cod_emp;
return nomdep;
end nom_depar;
select nom_depar (323)from dual;

-----6 crear una funcion que dado que el codigo del gerente nos devuelva los nombres de los empleados
que estan acargo de dicho gerente

create or replace function jefes_empl


(cod_ger number)
return varchar2
is
v_empleado varchar2(1000):='';
cursor empcur is
select nomb_emple
from emplea
where jefe=cod_ger;
begin
for k in empcur loop
v_empleado:=v_empleado||','||k.nomb_emple;
end loop;
return ltrim(v_empleado,',');
end;

select jefes_empl (330) from dual

--7 crear una funcion dado el codigo de la factura mostrar en nombre del cliente y producto que compro

create or replace function dat_fact (


cod_fac number)
return varchar2
is
v_datos varchar2(50);
begin
select nomb_cliente || ' ' || producto into v_datos
from facver
where cod_factura=cod_fac;
return v_datos;
end dat_fact;

select dat_fact (123) from dual;

---- 8 crear una funcio donde ingresando el codigo del producto muestre el nombre del producto y el
grupo donde pertenece
create or replace function datos_pr(
cod_are number)
return varchar2
is
nomgrup varchar2(40);
begin
select nomb|| ' ' || area1 into nomgrup
from verpro v join area a on v.COD_AR = a.COD_AR
where cod_pro= cod_are;
return nomgrup;
end datos_pr;

select datos_pr (235) from dual;


----9 se sufrio un descuento en el salario de los empleados donde el descuento sera el 10% de cada
empleado
create or replace function descuento (d_sueldo number)
return number
is
begin
return d_sueldo-(d_sueldo*0.1);
end;

select nomb_emple, apell_empl, salario, descuento (salario) from emplea;

-- 10 crear una funcion que reciba como dato de entrada el nro de departamento y una varible que
especificara el salario que se requiere retornar
--(B: basalrio bajo
--A salario medio
--M media salarial
--T total salario )
--esto reornara salario mayores, menores, media, totales de cada departemento que se ingresa

create or replace function f_dep_tiposal


(depno emplea.cod_de%type,
tiposal char default 'B' )
return number is
cursor cur_tipo_sal is
select max(salario) alto, min (salario) bajo, round (avg(salario)) media, sum (salario) total
from emplea
where cod_de=depno;
vr_tipo cur_tipo_sal%rowtype;
e_error_entrada exception;
begin
open cur_tipo_sal;
fetch cur_tipo_sal into vr_tipo;
close cur_tipo_sal;
case
when upper (tiposal)='A' then
return vr_tipo.ALTO;
when upper (tiposal)='B' then
return vr_tipo.BAJO;
when upper (tiposal)='M' then
return vr_tipo.MEDIA;
when upper (tiposal)='T' then
return vr_tipo.TOTAL;
else
raise e_error_entrada;
end case;
end;

select f_dep_tiposal (50, 'M') from dual;

También podría gustarte