viernes, 14 de junio de 2013

PROCEDURE - CURSOR


create or replace procedure listaPro(pNumero char) is
  contador integer := 0;
  vnombre empleado.nombre%type;

  cursor cpropiedad (pnumempleado empleado.numempleado%type) is
  select * from propiedad
  where numempleado = pnumempleado;

begin

  select nombre into vnombre
  from empleado
  where numempleado = pNumero;

  dbms_output.put_line('Nombre                         Numero');
  dbms_output.put_line(vnombre || ' ' || pNumero);
  dbms_output.put_line('      Numero      Tipo                      Renta');
  for rprop in cpropiedad(pNumero)
  LOOP
     dbms_output.put_line('      '|| rprop.numpropiedad ||'        ' || rprop.tipo || ' ' || rprop.renta);
     contador := contador + 1;  
  END LOOP;
  dbms_output.put_line('Total propiedades: ' || contador);
  exception
  when no_data_found then
  dbms_output.put_line('No hay registros');

end;


set serveroutput on
begin
  listaPro('SL21');
end;




--------------------------------------------------------------------------------------------------


create or replace
PROCEDURE CalcularEstadisticas is

  type prop is record(
  cantidad propiedad.numpropiedad%type,
  rentaPromedio float,
  rentaMaxima float,
  rentaMinima float
  );  
  cls prop;

begin
 
  select count(numpropiedad), avg(renta), max(renta), min(renta) into cls
  from propiedad;
 
  dbms_output.put_line('Total Propiedades: '||cls.cantidad||' rentaPromedio: '||cls.rentaPromedio||' rentaMaxima: '||cls.rentaMaxima||' renta minima: '||cls.rentaMinima);
 
end;

set serveroutput on
begin
CalcularEstadisticas;
end;

miércoles, 12 de junio de 2013

Creación de paquetes en PL/SQL


--creación de paquetes
create or replace package elPaquete is
procedure imprim (p1 numeric);

function sumar (p1 numeric, p2 numeric) return numeric;

function restar (p1 numeric, p2 numeric) return numeric;

function dividir (p1 numeric, p2 numeric) return numeric;

function multiplicar (p1 numeric, p2 numeric) return numeric;
end alPaquete;



--Agregar cuerpo al paquete
create or replace package body elPaquete is
procedure imprim(p1 numeric) is
begin
  dbms_output.put_line('El resultado es: '|| p1);
end imprim;
function sumar (p1 numeric, p2 numeric) return numeric is
begin

  return (p1+p2);
end sumar;
function restar (p1 numeric, p2 numeric) return numeric is
begin

  return (p1-p2);
end restar;

function dividir (p1 numeric, p2 numeric) return numeric is
begin
  if p2 = 0 then
    dbms_output.put_line('Error. no se puede dividir por cero');
    return 0;
  end if;
  return (p1/p2);
end dividir;
function multiplicar (p1 numeric, p2 numeric) return numeric is
begin

  return (p1*p2);
end multiplicar;
end elPaquete;


---- ejecutar el paquete!
select elPaquete.sumar(2,3) from dual;

select elPaquete.restar(2,3) from dual;

select elPaquete.dividir(10,5) from dual;

select elPaquete.multiplicar(2,3) from dual;

set serveroutput on
declare
  mivariable numeric;
begin
  mivariable := elPaquete.sumar(2,3);
  elPaquete.imprim(mivariable);
end;