Scripts SQL

Una vez terminada la instalación y configuración del entorno e interfaz del DBMS lo que resta es ingresar el código SQL en el software SQL Developer, el cual tiene una interfaz muy similar a la del SQL Sever 2008 que utilizamos para los laboratorios.
En este artículo resolvemos los ejercicios planteados en el archivo "BDPEDIDOS-PARATODOS_DBMS.sql".
Primero se adaptó el lenguaje del Script dado para nuestro DBMS (Oracle):

Enlace para Descargar el Archivo SQL:
Crear BDPedidos

Luego procedimos a la solución de los ejercicios planteados:

/*
Proyecto de Bases de Datos
Grupo Beta
DBMS: ORACLE 10g

INTEGRANTES:
  • Galo Latorre
  • Andrés Terán
  • José Tinajero
*/

--1.  Actualizar el precio unitario de los productos de la categoría CARNICOS, subiéndolos en un 10%

update productos
set preciounit=preciounit*1.10
where categoriaid=(select categoriaid from categorias
where nombrecat ='CARNICOS');

--2.  Actualizar el teléfono celular del proveedor cuyo contacto es MANUEL ANDRADE, con el valor 099010291

update proveedores
set celuprov = '099010291'
where nombreprov ='MANUEL ANDRADE';

--3.  Borrar el producto YOGURT DE SABORES

DELETE from productos
where descripcion = 'YOGURT DE SABORES';

--4.  Realizar las siguientes consultas:

/*
4.1 Mostrar todas las órdenes: el id de la orden, el apellido y nombre
del empleado que la atendió
    el nombre de la compañía cliente y la fecha de orden
*/
select * from ORDENES
select * from EMPLEADOS
select * from CLIENTES

select ORDENID, APELLIDO, NOMBRE, NOMBRECIA, FECHAORDEN
from ordenes o join EMPLEADOS e
on (o.EMPLEADOID=e.EMPLEADOID)
join CLIENTES c
on (o.CLIENTEID= c.CLIENTEID);

--4.2 Mostrar la suma total de cada tipo de producto pedidos en todas las órdenes.

select * from detalle_ordenes
select productoid, sum (cantidad) from detalle_ordenes
group by productoid ;

--4.3 Mostrar el número de órdenes atendidas por cada empleado, incluidos los que tienen 0 órdenes.

select nombre, apellido, count (o.empleadoid) from empleados e left join ordenes o
on e.empleadoid= o.empleadoid
group by nombre, apellido; 4.4 Muestre los proveedores y la suma de dinero vendido en los productos de ese proveedor.

--4.4 Muestre los proveedores y la suma de dinero vendido en los productos de ese proveedor.

select prov.nombreprov,sum(d.cantidad * pro.preciounit )
from proveedores prov, productos pro, detalle_ordenes d
where d.productoid= pro.productoid and prov.proveedorid= pro.proveedorid
group by nombreprov;

--5. Realizar el siguiente procedimiento almacenado.

--5.1 Escriba un procedimiento almacenado que reciba como parámetro un código de proveedor y
--    devuelve el número de órdenes en las que están incluidos productos de ese proveedor.

create or replace procedure num_ordenes(idproo int) returns integer is
   declare
   num int;
   begin
   select count(p.productoid) into num from productos p join detalle_ordenes dor
     on (p.productoid=dor.productoid)join ordenes ord on(ord.ordenid=dor.ordenid)
   where proveedorid=idproo
   group by proveedorid;
   return num;
end;
/
declare num int
execute ordenes_proveedor(1, num in out)
print 'numero de ordenes: ' + convert(char(20), num);

--5.2 Escriba un procedimiento almacenado que reciba como parámetro un nombre de una categoría y
    devuelve el código del producto de esa categoría que tiene más unidades vendidas.

select * from categorias
select * from productos
select * from detalle_ordenes

create or replace function mas_vendido (nomCat character(50)) returns integer is
   declare
   num int;
   begin
   select p.productoid,sum(cantidad)INTO NUM from productos p join categorias c on
(c.categoriaid=p.categoriaid)
   join detalle_ordenes dor on (p.productoid=dor.productoid)
   where c.nombrecat=nomCat
   group by descripcion, p.productoid
   order by sum DESC
   limit 1;
   return num;
end;
  /
select mas_vendido('CARNICOS');


Enlace para Descargar el Archivo SQL:
Solución Ejercicios SQL