Documentos de Académico
Documentos de Profesional
Documentos de Cultura
3. Realiza una consulta que muestre por cada producto el total de unidades
vendidas,
debe mostrar el identificador del producto, la descripción y la suma de las
unidades vendidas.
*/
-- 0. Recursos necesarios para realizar el ejercicio.
CREATE TYPE TIP_TELEFONOS AS VARRAY(3) OF VARCHAR2(15);
CREATE TYPE TIP_DIRECCION AS OBJECT(
CALLE VARCHAR2 (50),
POBLACION VARCHAR2(50),
CODPOSTAL NUMBER(5),
PROVINCIA VARCHAR2 (40)
);
CREATE TYPE TIP_CLIENTE AS OBJECT (
IDCLIENTE NUMBER,
NOMBRE VARCHAR2 (50),
DIREC TIP_DIRECCION,
NIF VARCHAR2 (9),
TELEF TIP_TELEFONOS
);
CREATE TYPE TIP_PRODUCTO AS OBJECT (
IDPRODUCTO NUMBER,
DESCRIPCION VARCHAR2 (80),
PVP NUMBER,
STOCKACTUAL NUMBER
);
-- 1. Función.
CREATE OR REPLACE FUNCTION TOTAL_VENTA (ID NUMBER) RETURN NUMBER AS
TOTAL_V NUMBER;
BEGIN
SELECT V.TOTAL_VENTA()
INTO TOTAL_V
FROM TABLA_VENTAS V WHERE IDVENTA = ID;
RETURN TOTAL_V;
exception
when no_data_found then
RETURN -1;
END TOTAL_VENTA;
-- 2. Bloque PL/SQL.
begin
dbms_output.put_line('Total de las ventas de la venta con id=2: '||
TOTAL_VENTA(2));
dbms_output.put_line('Total de las ventas de la venta con id=3: '||
TOTAL_VENTA(3));
end;
-- 3. Consulta.
SELECT tp.idproducto, tp.descripcion,
CASE
WHEN tp.idproducto in (SELECT DEREF(DETALLE.IDPRODUCTO).IDPRODUCTO idp
FROM TABLA_VENTAS P, TABLE(P.LINEAS) DETALLE
GROUP BY DEREF(DETALLE.IDPRODUCTO).IDPRODUCTO,
DEREF(DETALLE.IDPRODUCTO).DESCRIPCION)
THEN
(SELECT (0+prss.unidades) from (SELECT
DEREF(DETALLE.IDPRODUCTO).IDPRODUCTO idp,
DEREF(DETALLE.IDPRODUCTO).DESCRIPCION pr,
SUM(DETALLE.CANTIDAD) unidades
FROM TABLA_VENTAS P, TABLE(P.LINEAS)
DETALLE
GROUP BY
DEREF(DETALLE.IDPRODUCTO).IDPRODUCTO, DEREF(DETALLE.IDPRODUCTO).DESCRIPCION
order by idp) prss
where prss.idp = tp.idproducto)
ELSE 0
END AS units
FROM TABLA_PRODUCTOS tp
order by tp.idproducto;