9.12.11
Package Calculadora
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;
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;
end pkgCalculadora;
declare
r number(10);
begin
r := pkgCalculadora.suma(2, 3);
end;
Trigger Para Actualizar Stock
create table Compra(idCompra integer primary key, fecha date);
create table DetalleCompra(Cantidad integer, idCompra references Compra, idPro references Producto);
begin
insert into producto values(1,'Plasma',5);
insert into producto values(2,'MiniComponente',3);
insert into producto values(3,'Dvd',2);
insert into producto values(4,'Lavadora',5);
end;
begin
insert into Compra values(1,'06/06/2011');
insert into Compra values(2,'05/02/2010');
insert into Compra values(3,'05/02/2010');
insert into Compra values(4,'06/03/2012');
end;
begin
insert into DetalleCompra values(6,2,3);
insert into DetalleCompra values(8,1,4);
insert into DetalleCompra values(5,3,2);
insert into DetalleCompra values(7,4,1);
insert into DetalleCompra values(10,2,2);
end;
create or replace trigger actualizaStock
after insert on detalleCompra
for each row
begin
update Producto
set stockActual = stockActual + :new.cantidad
where idPro = :new.idPro;
end;
create table merma(idMerma integer, fecha date, idProducto integer, cantidad integer)
insert into merma values(1, '24/09/2009', 1, 10)
insert into merma values(2, '04/08/2109', 2, 3)
create or replace trigger cantidadMerma
after insert on merma
for each row
begin
update Producto
set stockActual = stockActual - :new.cantidad
where idPro = :new.idProducto;
end;
27.10.11
Ejercicio Giro Bancario (Trigger)
after insert
on giro
for each row
declare
saldoCuenta cuenta.saldo%type;
saldoLinea lineaCredito.saldo%type;
vIdLinea lineaCredito.idLinea%type;
vLineaUsada integer;
begin
select saldo, idLinea into saldoLinea, vIdLinea
from lineaCredito where idCuenta = :new.idCuenta;
if :new.monto> saldoCuenta + saldoLinea then
dbms_output.put_line('No hay plata !');
else
if :new.monto <= saldoCuenta then
update cuenta
set Saldo = saldo - :new.monto
where idCuenta = :new.idCuenta;
else
update cuenta
set Saldo = 0
where idCuenta = :new.idCuenta and
vLineaUsada = :new.monto - saldoCuenta;
update lineaCredito
set saldo = saldo - vLineaUsada
where idCuenta = :new.idCuenta;
insert into UsoLinea (idUso,idLinea,fecha,monto)
values(:new.idGiro,vIdLinea,
sysdate,vLineaUsada);
end if;
end if;
end;
11.8.11
Taller 01 -LIKE, COUNT, ORDER BY, TABLA DUAL
Objetivo:
El objetivo de ésta guía de ejercicios, es que UD. se familiarice con el entorno de Oracle.
Instrucciones Previas:
Como usuario system, desbloquea al usuario HR, recuerda que la contraseña del usuario system es duocadmin, otorgue todos los privilegios y permisos necesarios al usuario HR.
Desde el menú Comandos SQL ejecuta:
a) select * from departments; /* Señala para que sirve ésta sentencia */
R: Lista todos los departamentos con su atributos
b) Cómo puedo determinar cuántos departamentos existen. Específicamente se pide que cuentes los departamentos. Hay 10, 50 o 27? Efectúalo con la función de grupo COUNT
R: select count(*) from departments /* Con esta sentencia podemos saber que hay 27 departamentos*/
c) Qué realiza el comando: desc departments
R: Describe el contenido de la tabla identificando las columnas, y mencionando si el atributo del objeto puede ser o no nulo, identifica la llave primaria y foránea. También nos muestra el tipo de dato de cada columna (number, varchar2, etc).
d) Que realiza el comando: select * from tab ¿existe el comando select * from tab?
R: Muestra todas las tablas o vistas almacenadas en la base de datos del usuario
e) Para la tabla employees que empleado tiene como apellido el sufijo Austin. Apóyate con select * from employees where last_name = 'Austin'
R: Es Davis Austin y su id es 105
f) Cuantas tablas tiene el usuario HR? 3, 20, 8? Anota el SQL respectivo.
R: select count (*) from tab where tabtype = 'TABLE' /* Posee 7 tablas */g) Que arroja la sentencia: select employee_id, last_name from employees where last_name LIKE ‘%mar’; Ejecútalo. Y anota tu respuesta.
R: Arroja los apellido terminados en mar, en este caso seria el del empleado Kumarh) Ordena toda la tabla empleados por el campo employee_id descendente con la condición manager_id=122 la salida ¿es la siguiente?
|
R: select * from employees where manager_id = 122 order by employee_id desc
i) Para que sirve el query Select " Hoy es " sysdate from dual. Anota la salida.
R: Tira error poque esta mal formulada la sentencia. Podria ser select sysdate as "Hoy es" from dual
Que nos muestra la fecha de hoy, con el título de la columna como “Hoy es”.
j) Select user from dual
¿Entrega el usuario?
R: Entrega al usuario Anonymous
k) Cuantas vistas tiene el usuario HR? Anota el query respectivo
R: select count(*) from tab where tabtype = 'VIEW' /* Posee una vista */
l) ¿Qué es dual?
R: Es una tabla virtual que existe en todas las Bases de datos Oracle.