Sei sulla pagina 1di 4

CREATE TABLE D_Pedido_Producto_Marca ( Marca_IDmarca INTEGER NOT NULL, Producto_IDproducto INTEGER NOT NULL, Pedido_IDpedido INTEGER NOT NULL,

precio_venta FLOAT NOT NULL, precio_compra FLOAT NOT NULL, fecha_vencimiento DATE NOT NULL, cantidad_pedida INTEGER NOT NULL, unidad_metrica VARCHAR2 (15) NOT NULL, CONSTRAINT D_Producto_Marca_pk PRIMARY KEY (Marca_IDmarca, Prod ucto_IDproducto, Pedido_IDpedido) ); CREATE TABLE D_Tiempo ( ao INTEGER NOT NULL, id_mes INTEGER NOT NULL, id_quincena INTEGER NOT NULL, mes VARCHAR2 (20) NOT NULL, CONSTRAINT D_tiempo_pk PRIMARY KEY (ao, id_mes, id_quincena) ); CREATE TABLE NH_Productos_Perdidos( Producto_Marca_IDmarca INTEGER NOT NULL, Producto_Marca_IDproducto INTEGER NOT NULL, Pedido_IDpedido INTEGER NOT NULL, D_tiempo_ao INTEGER NOT NULL, D_tiempo_idmes INTEGER NOT NULL, D_tiempo_idquincena INTEGER NOT NULL, cant_producto_perdido INTEGER NOT NULL, dinero_total_perdido FLOAT NOT NULL, porc_producto_perdido FLOAT NOT NULL, CONSTRAINT H_Productos_pk PRIMARY KEY(Producto_Marca_IDmarca, Prod ucto_Marca_IDproducto, Pedido_IDpedido, D_tiempo_ao, D_tiempo_idmes, D_tiempo_idq uincena) ); ALTER TABLE NH_Productos_Perdidos add CONSTRAINT H_Productos_fk1 FOREIGN KEY(Producto_Marca_IDmarca, Producto_Mar ca_IDproducto, Pedido_IDpedido) REFERENCES D_Pedido_Producto_Marca(Marca_IDmarca , Producto_IDproducto, Pedido_IDpedido); ALTER TABLE NH_Productos_Perdidos add CONSTRAINT H_Productos_D_tiempo_fk FOREIGN KEY(D_tiempo_ao, D_tiempo_idme s, D_tiempo_idquincena) REFERENCES D_Tiempo(ao, id_mes, id_quincena); CREATE VIEW V_Producto_Marca_Pedido AS SELECT pdm.IDmarca, pdm.IDproducto, ppd.IDpedido, pdm.precio_venta, pdm.precio_compra, pdm.unidad_metrica, ppd.fecha_vencimiento, ppd.cantidad FROM Producto_Marca pdm join Producto_pedido ppd on(pdm.idmarca = ppd.i dmarca and pdm.idproducto = ppd.idproducto); MERGE INTO D_pedido_producto_marca A USING V_Producto_Marca_Pedido B ON( A.Marca_IDmarca = B.idmarca and A.Producto_IDproducto = B.idproducto and A.pedido_IDpedido = B.idpedido)

WHEN MATCHED THEN UPDATE SET A.precio_venta = B.precio_venta, A.precio_compra = B.precio_compra, A.unidad_metrica = B.unidad_metrica, A.fecha_vencimiento = B.fe cha_vencimiento, A.cantidad_pedida = B.cantidad WHEN NOT MATCHED THEN INSERT (Marca_IDmarca , Producto_IDproducto, pedido_idpedido , p recio_venta , precio_compra, unidad_metrica, fecha_vencimiento, cantidad_pedid a ) VALUES(B.idmarca, B.idproducto, B.idpedido, B.precio_venta, B.precio_compr a, B.unidad_metrica, B.fecha_vencimiento, B.cantidad);

CREATE VIEW V_tiempo AS SELECT distinct(To_number(To_char(fecha_vencimiento,'MM'))) id_ mes, CASE WHEN To_number(To_char(fecha_vencimiento,'DD')) < 16 THEN 1 ELSE 2 END id_quincena, To_number( To_char( fecha_vencimiento,'YYYY' ) ) as (To_char(fecha_vencimiento,'month')) mes FROM Producto_Pedido; ao,

a,

MERGE INTO D_Tiempo A USING V_Tiempo B ON(A.ao = B.ao and A.id_mes = B.id_mes and A.id_quincena = B.id_quincena) WHEN MATCHED THEN UPDATE SET A.mes = B.mes WHEN NOT MATCHED THEN INSERT (ao, id_mes, id_quincena, mes) VALUES (B.ao, B.id_mes, B.id_quincen B.mes);

CREATE TABLE T_detalle_procesado ( iddetalle INTEGER NOT NULL, CONSTRAINT D_pedido_procesado_pk );

PRIMARY KEY (iddetalle)

CREATE OR REPLACE PROCEDURE ESTADISTICA_VENCIMIENTO AS cursor datos IS SELECT To_number(To_char(pdm.fecha_vencimiento,'MM')) id_mes, CASE WHEN To_number(To_char(pdm.fecha_vencimiento,'DD')) < 16 ELSE 2 END as id_quincena, To_number( To_char( pdm.fecha_vencimiento,'YYYY' ) ) as To_char( pdm.fecha_vencimiento,'month' ) as nmes, pdm.marca_idmarca as marca, pdm.producto_idproducto as producto, pdm.pedid o_idpedido as pedido, ao,

THEN 1

pdm.cantidad_pedida as cantidad_pedida, pdm.precio_venta - pdm.precio_compra as ganacia_por_producto, sum(dfc.cantidad)as cantidadvendida from detalle_factura dfc join factura fac on(fac.idfactura = dfc.idfactura) join D_pedido_producto_marca pdm on(dfc.idmarca = pdm.marca_idmarca and dfc.idpr oducto = pdm.producto_idproducto and pdm.pedido_idpedido = dfc.idpedido) where dfc.iddetalle_factura not in(select * from T_detalle_procesado) and fac.fe cha <= pdm.fecha_vencimiento GROUP BY To_number(To_char(pdm.fecha_vencimiento,'MM')), CASE WHEN To_number(To_char(pdm.fecha_vencimiento,'DD')) < 16 THEN 1 ELSE 2 END, To_number( To_char( pdm.fecha_vencimiento,'YYYY' ) ), To_char( pdm.fe cha_vencimiento,'month' ), pdm.marca_idmarca, pdm.producto_idproducto, pdm.pedid o_idpedido, pdm.cantidad_pedida, pdm.precio_venta - pdm.precio_compra; v_ao D_TIEMPO."AO"%type; v_idmes D_TIEMPO.ID_MES%type; v_idquincena D_TIEMPO.ID_QUINCENA%type; v_mes D_TIEMPO.MES%type; v_cantidadped INTEGER; v_cantidadvend INTEGER; v_dineroproducto float; v_porcentajep float; v_marca D_PEDIDO_PRODUCTO_MARCA.MARCA_IDMARCA%type; v_producto D_PEDIDO_PRODUCTO_MARCA.producto_idproducto%type; v_pedido D_PEDIDO_PRODUCTO_MARCA.pedido_idpedido%type; v_perdido INTEGER; v_dinero_perdido float; BEGIN open datos; FETCH datos INTO v_idmes, v_idquincena, v_ao, v_mes, v_marca, v_producto, v_ped ido, v_cantidadped, v_dineroproducto, v_cantidadvend; while(datos%found) LOOP

v_perdido := v_cantidadped - v_cantidadvend; v_porcentajep := (v_perdido/v_cantidadped)*100; v_dinero_perdido := v_perdido * v_dineroproducto; INSERT into nh_productos_perdidos values(v_marca, v_producto, v_pedido , v_ao, v_idmes, v_idquincena, v_perdido, v_dinero_perdido, v_porcentajep); FETCH datos INTO v_idmes, v_idquincena, v_ao, v_mes, v_marca, v_produc to, v_pedido, v_cantidadped, v_dineroproducto, v_cantidadvend; INSERT INTO T_DETALLE_PROCESADO ( select iddetalle_factura from DETALLE_FACTURA where iddetalle_factura NOT IN(select iddetalle from T_detalle_PROCESADO) ); END LOOP; close datos; COMMIT; END ESTADISTICA_VENCIMIENTO;

Potrebbero piacerti anche