¿Como colocar esto en un procedimiento almacenado?
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 originalSELECT
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 originalCREATE 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;