jueves, 28 de abril de 2011

Create or replace procedure CrearTablas
is
begin
if VerificaTabla('PROPIEDAD')then
execute immediate 'Drop table PROPIEDAD';
end if;
if VerificaTabla('EMPLEADO')then
execute immediate 'Drop table EMPLEADO';
end if;
if VerificaTabla('OFICINA')then
execute immediate 'Drop table OFICINA';
end if;

execute immediate 'Create table OFICINA(
idOficina integer not null,
direccion varchar2(45),
comuna varchar2(25),
ciudad varchar2(35),
codPostal varchar2(10),
constraint PK_OFICINA primary key (idOficina));
)';
execute immediate 'Create table EMPLEADO(
IdEmpleado int not null,
nombre varchar2(30) not null,
apellido varchar2(45)not null,
cargo varchar(35) not null,
sexo char(1)not null,
fechaNacimiento date not null,
salario int not null,
idOficina int not null,
CONSTRAINT ID_PK PRIMARY KEY (IdEmpleado),
CONSTRAINT NN_FK foreign key (IdOficina) references Oficina (IdOficina)
)';
execute immediate 'Create table Propiedad(
IdPropiedad int not null,
direccion varchar2(45) not null,
comuna varchar2(25)not null,
ciudad varchar(35) not null,
codigoPostal varchar(10) not null,
tipoVivienda int not null,
numeroHabitaciones int not null,
rentaMensual Float not null,
IdEmpleado int not null,
CONSTRAINT IDD_PK PRIMARY KEY (IdPropiedad),
CONSTRAINT NM_FK foreign key (IdEmpleado) references Empleado (IdEmpleado)
)';
end;

DESC OFICINA

begin
CrearTablas;
end

begin
if VerificaTabla('employees')= TRUE then
dbms_output.put_line('La tabla existe');
else
dbms_output.put_line('La tabla no existe');
end if;
end

Create or Replace procedure miCursor(pOficina integer)
as
cursor ListaPropiedadesCursor(pcOficina integer)
select nombre, apellido, count(idPropiedad)
from Empleadoe, Propiedad p
where e.idOficina = pcOficina
and e.idEmpleado=p.idEmpleado
group by nombre,apellido;

vnombre Empleado.nombre%type;
vapellido Empleado.nombre%type;
vPropXEmpleado integer;
vTotalxOficina integer;

begin
select Count (idPropiedad) into vTotalxOficina
from PROPIEDAD
where idOficina = pOficina;
1) Cree la función VerificaTabla, que reciba como parámetro un nombre de tabla, y retorne TRUE si la tabla existe o FALSE si la tabla no existe. (TRUE y FALSE son booleanos)


Create or replace function VerificaTabla(pNombre Varchar2)
return boolean
is
vTabla user_tables.table_name%type;
begin
selecT table_name into vTabla
from user_tables
where lower(table_name) = lower(pNombre);
return TRUE;
Exception
when NO_DATA_FOUND then
return FALSE;
end;

begin
if VerificaTabla('employees')= TRUE then
dbms_output.put_line('La tabla existe');
else
dbms_output.put_line('La tabla no existe');
end if;
end

lunes, 18 de abril de 2011

//Creo la tabla oficina
create table OFICINA (
NUMOFICINA CHAR(4) not null,
CALLE CHAR(30),
CIUDAD CHAR(25),
CODIGOPOSTAL CHAR(10),
constraint PK_OFICINA primary key (NUMOFICINA)
);
----------------------------------------------------------------------------------------------

//Diseñar un PA para Modificar la tabla oficina agregándole la columna Direccion.

create or Replace PROCEDURE agregarDireccion
as
BEGIN
execute immediate 'alter table Oficina
  add Direccion varchar2(40)';
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Error en agregar atributo');
END;

-----------------------------------------------------------------------------------------------
//Compruebo que en mi tabla "Oficina" este el atributo "Direccion" agregado.
DESCRIBE OFICINA

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

create or Replace PROCEDURE agregarDireccion
as
BEGIN
execute immediate 'alter table Oficina
  add Direccion varchar2(40)';
EXCEPTION
when NO_DATA_FOUND then
dbms_output.put_line('se gatilla NO_DATA_FOUND');
WHEN OTHERS THEN
dbms_output.put_line('se gatilla OTHERS supongo porque La tabla OFICINA no existe');
END;


bibliografia de errores que se le pueden agregar:
http://www.devjoker.com/contenidos/Tutorial-PLSQL/48/Excepciones-en-PLSQL.aspx
-----------------------------------------------------------------------------------------------
//Escriba un programa que gatille una excepción al tratar de eliminar un registro inexistente.
create or replace PRODECURE eliminarRegistro (pnumOficina oficina.numOficina%type)
is
    vnumoficina oficina.numoficina%type;
begin
    select numoficina into vnumoficina
    from oficina
    where numoficina = pnumOficina;

    delete from oficina
    when numOficina = pnumOficina;
exception
    when NO_DATA_FOUND then
    dbms_output.put_line('Registro :' || pnumoficina || ' No existe para eliminarlo);
End;

-----------------------------------------------------------------------------------------------
//Crear una función de calcule el total de empleados por Oficina.
create or replace FUNCTION CuentaEmpleados (pnumOficina oficina.numOficina%type)
return interger;
as
    vtotEmpleados interger :=0;
    vnumoficina oficina.numoficina%type;
begin
    select numoficina into vtotEmpleados
    from oficina
    where numoficina = pnumOficina;

    select count(numoficina) int vtotEmpleados
    from empleados
    where numoficina = pnumOficina;
    return vtotEmpleados;
exception
    when NO_DATA_FOUND then
    dbms_output.put_line('Oficina :' || pnumoficina || ' No existe');
    return 0;
End;

jueves, 14 de abril de 2011

create or replace procedure IngresarVisita(Pnumero Number,Pdescripcion Varchar2)
is
begin
INSERT INTO Visita
(Numvisita,Descripcion)
values
(Pnumero,Pdescripcion );
dbms_output.put_line('Visita Ingresada Numero: ' ||Pnumero ||' Descripcion :' ||Pdescripcion );
end;



begin
IngresarVisita(4,'mamamam');
end;
create or replace procedure VerCliente(Pnumcliente Number)
is
Vnombre employees.first_name%type;
Vapellido employees.last_name%type;
begin
select first_name,last_name into Vnombre,Vapellido
from employees
where employee_id = Pnumcliente ;
dbms_output.put_line('El cod ingresado es : '||Pnumcliente ||' Nombre: ' ||Vnombre ||' Apellido: '||Vapellido );
end;

begin
VerCliente(101) ;
end;

lunes, 11 de abril de 2011


1.-Crear una función SumaDos (n1, n2) que reciba 2 numeros y retorne la suma de ellos.
CREATE OR REPLACE FUNCTION sumaDos (n1 Numeric, n2 Numeric)
RETURN numeric
is
BEGIN
return (n1 + n2);
END;
2.-Crear la Función Potencia (n, p) que reciba un numero y retorne el numero elevado a la potencia p
CREATE OR REPLACE FUNCTION Potencia100 (n Numeric,p Numeric)
RETURN numeric
is
BEGIN
loop
return power(n,p);
end loop;
END;

create or replace function Potencia69(n Numeric, p Numeric)
return numeric;
is
resultado numeric := 1;
begin
for i in 1..p
loop
resultado := resultado * p;
 end loop;
return resultado;
end
3.-Escribir la funcion MayorDeTres (n1, n2, n3) que retorne el mayor de los tres elementos ingresados
CREATE OR REPLACE FUNCTION mayorDeTres (n1 numeric, n2 numeric, n3 numeric)
RETURN numeric
is
BEGIN
RETURN (GREATEST(n1,n2,n3));
END;
4.-Diseñar una función  Invertir3 (n) que reciba un numero de tres digitos y retorne el numero invertido. Ej: 123 retorna 321

5.-Implementar una funcion invertirN(n) que reciba un numero de N digitos y retorne el numero invertido

6.-Escriba la función BuscaString (Srt1, Str2) y retorna Verdadero o falso segun si el Str2 se encuentra en Str1

jueves, 7 de abril de 2011

CREATE OR REPLACE FUNCTION darteVuelta (pN Numeric)
RETURN numeric
is
BEGIN
return (mod(pN,10)*10+trunc(pN/10));
END;

SELECT darteVuelta(12) from dual;


SELECCIONA UN DATYO TIPO NUMERICO Y LO DA VUELTA
CREATE OR REPLACE FUNCTION darteVuelta (pN Numeric)
RETURN numeric
is
BEGIN
return reverse(pN);
END;

SELECT reverse('123') from dual;
CREATE OR REPLACE FUNCTION CalculaParImpar (pN Numeric)
RETURN varchar2
is
BEGIN
if MOD(pN,2) = 0 Then
  return 'par';
else
  return 'impar';
end if;
END;

SELECT CalculaParImpar (3) from dual;

CALCULA PAR E IMPAR