Ya qué según he entendido un procedimiento almacenado, solo puede devolver un valor de un select, y aquí como vemos hay varios campos dentro del select, he leído que se puede realizar con un cursores, necesitaría algo de orientación.
Código SQL:
Ver original
SELECT cp.idcompra AS IDCOMPRA ,p.nombre AS Nombre_del_Producto , cp.cantidad AS Entrada , cp.salida AS Salida , (p.cantidad)+(cp.cantidad) AS StockCantidad , c.fecha AS Fecha FROM compradetalle cp INNER JOIN compra c ON cp.entradacompra = c.id INNER JOIN producto p ON cp.nombre = p.idproducto WHERE trunc (c.fecha) BETWEEN '29072013' AND '30072013' UNION SELECT vd.idventa AS IDventa , pr.nombre AS Nombre_del_Producto , vd.entrada AS Entrada , vd.cantidad AS Salidad , pr.cantidad AS StockCantidad , c.fecha AS Fecha FROM ventadetalle vd INNER JOIN venta c ON vd.salidaventa = c.id INNER JOIN producto pr ON vd.nombre = pr.idproducto WHERE trunc (c.fecha) BETWEEN '29072013' AND '30072013' ORDER BY IDcompra, fecha;
He Intentado con un cursor, pero a la hora de compilarlo solo me dice bloque anonimo, ¿Qué valor tendría que darle a c1, como parametro del procedimiento?
Código SQL:
Ver original
CREATE OR REPLACE PROCEDURE buscar(c1 OUT sys_refcursor) IS BEGIN OPEN c1 FOR SELECT cp.idcompra AS IDCOMPRA ,p.nombre AS Nombre_del_Producto , cp.cantidad AS Entrada , cp.salida AS Salida , (p.cantidad)+(cp.cantidad) AS StockCantidad , c.fecha AS Fecha FROM compradetalle cp INNER JOIN compra c ON cp.entradacompra = c.id INNER JOIN producto p ON cp.nombre = p.idproducto WHERE trunc (c.fecha) BETWEEN '29072013' AND '30072013' UNION SELECT vd.idventa AS IDventa , pr.nombre AS Nombre_del_Producto , vd.entrada AS Entrada , vd.cantidad AS Salidad , pr.cantidad AS StockCantidad , c.fecha AS Fecha FROM ventadetalle vd INNER JOIN venta c ON vd.salidaventa = c.id INNER JOIN producto pr ON vd.nombre = pr.idproducto WHERE trunc (c.fecha) BETWEEN '29072013' AND '30072013' ORDER BY IDcompra, fecha; END;