jueves, 17 de noviembre de 2011
viernes, 11 de noviembre de 2011
jueves, 10 de noviembre de 2011
primer package calculadora
create or replace package pkgCalculadora is
function suma(p1 number, p2 number) return number;
function resta(p1 number, p2 number) return number;
function multiplica(p1 number, p2 number) return number;
function divide(p1 number, p2 number) return number;
function numeroFactorial(p1 number) return number;
function exponenteAlCuadrado(p1 number) return number;
function exponenteAlcubo(p1 number) return number;
end pkgCalculadora;
create or replace package body pkgCalculadora is
procedure imprime (pvalor number) is
begin dbms_output.put_line('Resultado: ' pvalor);
end imprime;
function suma(p1 number, p2 number) return number is
Begin imprime(p1+p2); return p1+p2;
End suma;
function resta(p1 number, p2 number) return number is
Begin imprime(p1-p2); return p1-p2;
End resta;
function multiplica(p1 number, p2 number) return number is
Begin imprime(p1*p2); return p1*p2;
End multiplica;
function divide(p1 number, p2 number) return number is
Begin imprime(p1/p2); return p1/p2;
EXCEPTION when Zero_divide then dbms_output.put_line ('Error !! Division por Cero');
End divide;
function numeroFactorial(p1 number) return number is
beginres =i;
for(i=1;i<=p1;i++);
res =res*i;
return res;
end numeroFactorial;
function exponenteAlCuadrado(p1 number) return number is
Begin imprime(p1*p1); return p1*p1;
End multiplica;
function exponenteAlcubo(p1 number) return number is
Begin imprime(p1*p1*p1); return p1*p1*p1;
End multiplica;
end pkgCalculadora;
declare r number(10);begin r := pkgCalculadora.suma(2, 3);
end;
function suma(p1 number, p2 number) return number;
function resta(p1 number, p2 number) return number;
function multiplica(p1 number, p2 number) return number;
function divide(p1 number, p2 number) return number;
function numeroFactorial(p1 number) return number;
function exponenteAlCuadrado(p1 number) return number;
function exponenteAlcubo(p1 number) return number;
end pkgCalculadora;
create or replace package body pkgCalculadora is
procedure imprime (pvalor number) is
begin dbms_output.put_line('Resultado: ' pvalor);
end imprime;
function suma(p1 number, p2 number) return number is
Begin imprime(p1+p2); return p1+p2;
End suma;
function resta(p1 number, p2 number) return number is
Begin imprime(p1-p2); return p1-p2;
End resta;
function multiplica(p1 number, p2 number) return number is
Begin imprime(p1*p2); return p1*p2;
End multiplica;
function divide(p1 number, p2 number) return number is
Begin imprime(p1/p2); return p1/p2;
EXCEPTION when Zero_divide then dbms_output.put_line ('Error !! Division por Cero');
End divide;
function numeroFactorial(p1 number) return number is
beginres =i;
for(i=1;i<=p1;i++);
res =res*i;
return res;
end numeroFactorial;
function exponenteAlCuadrado(p1 number) return number is
Begin imprime(p1*p1); return p1*p1;
End multiplica;
function exponenteAlcubo(p1 number) return number is
Begin imprime(p1*p1*p1); return p1*p1*p1;
End multiplica;
end pkgCalculadora;
declare r number(10);begin r := pkgCalculadora.suma(2, 3);
end;
que son los packages
Un package (paquete) es una estructura que agrupa objetos compilados(procedimientos, funciones, variables, etc.) en la base de datos.
Generalmente se utiliza para agrupar objetos del mismo proceso de negocio o cuyos objetivos estén relacionados
Un package tiene dos partes:
Especificación(encabezado): Se declaran los objetos (procedimientos, funciones, variables, etc.) que son de uso público. Sólo es declaración, no contiene código.
Cuerpo(contenido): Contiene el código de los objetos declarados en la especificación. También se declaran y contienen los objetos (procedimientos, funciones, variables, etc.) que son de uso privado
Generalmente se utiliza para agrupar objetos del mismo proceso de negocio o cuyos objetivos estén relacionados
Un package tiene dos partes:
Especificación(encabezado): Se declaran los objetos (procedimientos, funciones, variables, etc.) que son de uso público. Sólo es declaración, no contiene código.
Cuerpo(contenido): Contiene el código de los objetos declarados en la especificación. También se declaran y contienen los objetos (procedimientos, funciones, variables, etc.) que son de uso privado
trigger resuelto segunda solemne
create or replace trigger trCuentaBancaria
after insert on giro
for each row
declare
vsaldoCuenta cuenta.saldo%type;
vsaldoLinea lineaCredito.saldo%type;
vIdLineaCredito lineaCredito.idLinea%type;
vLineaUsada integer;
begin
select saldo into vsaldoCuenta
where idCuenta = :new.idCuenta;
select saldo, idLinea into vsaldoLinea, vIdLineaCredito
from lineaCredito
where idCuenta = :new.idCuenta;
if :new.monto> vsaldoCuenta + vsaldoLinea then
dbms_output.put_line('Error No hay saldo suficiente disponible');
else if :new.monto <= vsaldoCuenta then
update cuenta
set Saldo = saldo - :new.monto
where idCuenta = :new.idCuenta;
else update cuenta
set Saldo = 0
where idCuenta = :new.idCuenta;
update lineaCredito
set saldo = saldo - vLineaUsada
where idCuenta = :new.idCuenta; vlineaUsada = vSaldoCuenta-vSaldoLinea;
insert into UsoLinea values(seqUsoLinea.nextval,vIdLineaCredito,sysdate,vlineausada)
end if;
end if;
end;
after insert on giro
for each row
declare
vsaldoCuenta cuenta.saldo%type;
vsaldoLinea lineaCredito.saldo%type;
vIdLineaCredito lineaCredito.idLinea%type;
vLineaUsada integer;
begin
select saldo into vsaldoCuenta
where idCuenta = :new.idCuenta;
select saldo, idLinea into vsaldoLinea, vIdLineaCredito
from lineaCredito
where idCuenta = :new.idCuenta;
if :new.monto> vsaldoCuenta + vsaldoLinea then
dbms_output.put_line('Error No hay saldo suficiente disponible');
else if :new.monto <= vsaldoCuenta then
update cuenta
set Saldo = saldo - :new.monto
where idCuenta = :new.idCuenta;
else update cuenta
set Saldo = 0
where idCuenta = :new.idCuenta;
update lineaCredito
set saldo = saldo - vLineaUsada
where idCuenta = :new.idCuenta; vlineaUsada = vSaldoCuenta-vSaldoLinea;
insert into UsoLinea values(seqUsoLinea.nextval,vIdLineaCredito,sysdate,vlineausada)
end if;
end if;
end;
jueves, 20 de octubre de 2011
Clase 20 de octubre TRIGGER!!
//crear la tabla autor y libro
create table auto(idAutor integer primary key,nombre varchar2(30));
create table libro(idLibro integer primary key,nombrelibro varchar2(30),idAutor references autor);
// inserciones
insert into autor values(1'erwin');
insert into autor values(2'soilaCerda');
insert into autor values(3'rosamel fierro');
insert into autor values(4'marichu palacios');
insert into libro values(1'introduccion a oracle'1);
insert into libro values(2'kamasutra'2);
insert into libro values(3'las mil y una noche'3);
insert into libro values(4'la parcela de erwin'4);
// Contador
select * autor;
select idAutoe, count(*)
from libro
group by idAutor
order by 2 desc;
// trigger
create or replace trigger cascadaDelete
alter delete on autor
for each row
begin
delete from libro
where idAutor = :old.idAutor;
end;
delete from auto
where nombre = 'erwin';
Desactivar trigger
alter trigger cascadaDelete disable;
---------------------------------------------------------------------------------------------------------
create table producto(idProducto integer primary key,nombreProducto varchar2(30),stockActual integer);
create table compra(idCompra integer primary key,fecha date);
create table detalleCompra(idCompra reference compra,idProducto reference producto,cantidad integer);
create table merma(idMerma integer primary key,fecha date ,idProducto integer references producto,cantidad integer);
create or replace trigger actualizaStock
after insert on detalleCompra
for each row
begin
update producto
set stockActual = stockActual + :new.cantidad;
where idProducto = :new.idProducto;
end;
create or replace trigger cantidadMerma
alter insert on merma
for each row
begin
update producto
set tockActual = stockActual - :new.cantidad;
where idProducto = :new.idProducto;
end;
create table auto(idAutor integer primary key,nombre varchar2(30));
create table libro(idLibro integer primary key,nombrelibro varchar2(30),idAutor references autor);
// inserciones
insert into autor values(1'erwin');
insert into autor values(2'soilaCerda');
insert into autor values(3'rosamel fierro');
insert into autor values(4'marichu palacios');
insert into libro values(1'introduccion a oracle'1);
insert into libro values(2'kamasutra'2);
insert into libro values(3'las mil y una noche'3);
insert into libro values(4'la parcela de erwin'4);
// Contador
select * autor;
select idAutoe, count(*)
from libro
group by idAutor
order by 2 desc;
// trigger
create or replace trigger cascadaDelete
alter delete on autor
for each row
begin
delete from libro
where idAutor = :old.idAutor;
end;
delete from auto
where nombre = 'erwin';
Desactivar trigger
alter trigger cascadaDelete disable;
---------------------------------------------------------------------------------------------------------
create table producto(idProducto integer primary key,nombreProducto varchar2(30),stockActual integer);
create table compra(idCompra integer primary key,fecha date);
create table detalleCompra(idCompra reference compra,idProducto reference producto,cantidad integer);
create table merma(idMerma integer primary key,fecha date ,idProducto integer references producto,cantidad integer);
create or replace trigger actualizaStock
after insert on detalleCompra
for each row
begin
update producto
set stockActual = stockActual + :new.cantidad;
where idProducto = :new.idProducto;
end;
create or replace trigger cantidadMerma
alter insert on merma
for each row
begin
update producto
set tockActual = stockActual - :new.cantidad;
where idProducto = :new.idProducto;
end;
Suscribirse a:
Entradas (Atom)