Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/08/2013, 02:09
fradalape
 
Fecha de Ingreso: julio-2013
Mensajes: 36
Antigüedad: 10 años, 9 meses
Puntos: 1
Pregunta Procedimiento Almacenado que Utiliza Select con varios campos.

¿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 original
  1. SELECT
  2. cp.idcompra AS IDCOMPRA
  3. ,p.nombre AS Nombre_del_Producto
  4. , cp.cantidad AS Entrada
  5. , cp.salida AS Salida
  6. , (p.cantidad)+(cp.cantidad) AS StockCantidad
  7. , c.fecha AS Fecha
  8. FROM compradetalle cp
  9. INNER JOIN compra c ON cp.entradacompra = c.id
  10. INNER JOIN producto p ON cp.nombre = p.idproducto
  11. WHERE  trunc (c.fecha) BETWEEN  '29072013' AND '30072013'
  12. UNION
  13. SELECT
  14.   vd.idventa AS IDventa
  15. , pr.nombre AS Nombre_del_Producto
  16. , vd.entrada AS Entrada
  17. , vd.cantidad AS Salidad
  18. , pr.cantidad AS StockCantidad
  19. , c.fecha AS Fecha
  20. FROM ventadetalle vd
  21. INNER JOIN venta c ON vd.salidaventa = c.id
  22. INNER JOIN producto pr ON vd.nombre = pr.idproducto
  23. WHERE  trunc (c.fecha) BETWEEN  '29072013' AND '30072013'
  24. 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
  1. CREATE OR REPLACE PROCEDURE buscar(c1 OUT sys_refcursor)
  2. IS
  3. BEGIN
  4. OPEN c1 FOR
  5. SELECT
  6. cp.idcompra AS IDCOMPRA
  7. ,p.nombre AS Nombre_del_Producto
  8. , cp.cantidad AS Entrada
  9. , cp.salida AS Salida
  10. , (p.cantidad)+(cp.cantidad) AS StockCantidad
  11. , c.fecha AS Fecha
  12. FROM compradetalle cp
  13. INNER JOIN compra c ON cp.entradacompra = c.id
  14. INNER JOIN producto p ON cp.nombre = p.idproducto
  15. WHERE  trunc (c.fecha) BETWEEN  '29072013' AND '30072013'
  16. UNION
  17. SELECT
  18.   vd.idventa AS IDventa
  19. , pr.nombre AS Nombre_del_Producto
  20. , vd.entrada AS Entrada
  21. , vd.cantidad AS Salidad
  22. , pr.cantidad AS StockCantidad
  23. , c.fecha AS Fecha
  24. FROM ventadetalle vd
  25. INNER JOIN venta c ON vd.salidaventa = c.id
  26. INNER JOIN producto pr ON vd.nombre = pr.idproducto
  27. WHERE  trunc (c.fecha) BETWEEN  '29072013' AND '30072013'
  28. ORDER BY IDcompra, fecha;
  29. END;