Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/02/2013, 13:12
Avatar de JuJoGuAl
JuJoGuAl
 
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 9 meses
Puntos: 19
Capturar el resultado de un Procedure desde un BAT

Buenas amigos, tengo una duda con SQL y nose si este es el foro indicado para postear, veran tengo un sistema administrativo llamado VALERY que maneja una BD con extension MDF, para poder sacar unas estadisticas arme un PROCEDURE, usando "SQL MANAGER INTERBASE AND FIREBIRD" este es el PROCEDURE

Código SQL:
Ver original
  1. SET TERM ^ ;
  2.  
  3. CREATE OR ALTER PROCEDURE indicadores_ventas_por_producto (INICIAL DATE, FINAL DATE)
  4. RETURNS (FRANQ INTEGER, TE_CANT INTEGER, TE_MONTO DOUBLE PRECISION, ENSREG_CANT INTEGER, ENSREG_MONTO DOUBLE PRECISION, ENSGDE_CANT INTEGER, ENSGDE_MONTO DOUBLE PRECISION, SAND_CANT INTEGER, SAND_MONTO DOUBLE PRECISION, POST_CANT INTEGER, POST_MONTO DOUBLE PRECISION, CREM_CANT INTEGER, CREM_MONTO DOUBLE PRECISION, MINIS_CANT INTEGER, MINIS_MONTO DOUBLE PRECISION, ADC_CANT INTEGER, ADC_MONTO DOUBLE PRECISION, DESA_CANT INTEGER, DESA_MONTO DOUBLE PRECISION, WRAP_ENS INTEGER, WRAP_SUB INTEGER, FEC_REG DATE
  5. )
  6. AS
  7. BEGIN
  8.  
  9.     BEGIN
  10.     /* Variable de la Franquicia */
  11.     FRANQ = 14;
  12.     TE_CANT = 0;
  13.     TE_MONTO = 0;
  14.     ENSREG_CANT = 0;
  15.     ENSREG_MONTO = 0;
  16.     ENSGDE_CANT = 0;
  17.     ENSGDE_MONTO = 0;
  18.     SAND_CANT = 0;
  19.     SAND_MONTO = 0;
  20.     POST_CANT = 0;
  21.     POST_MONTO = 0;
  22.     CREM_CANT = 0;
  23.     CREM_MONTO = 0;
  24.     MINIS_CANT = 0;
  25.     MINIS_MONTO = 0;
  26.     ADC_CANT = 0;
  27.     ADC_MONTO = 0;
  28.     DESA_CANT = 0;
  29.     DESA_MONTO = 0;
  30.     WRAP_ENS  = 0;
  31.     WRAP_SUB  = 0;
  32.     FEC_REG = :INICIAL;
  33.    
  34.     SELECT
  35.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
  36.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.total_base_imponible,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.total_base_imponible,0))) AS monto
  37.     FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO
  38.     WHERE
  39.     (VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
  40.     AND
  41.     (VENTAS_DETALLES.PRODUCTO_NOMBRE LIKE 'TE %')
  42.     INTO :TE_CANT, :TE_MONTO;
  43.    
  44.     SELECT
  45.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
  46.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.total_base_imponible,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.total_base_imponible,0))) AS monto
  47.     FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO JOIN PRODUCTOS ON VENTAS_DETALLES.PRODUCTO_CODIGO=productos.CODIGO_PRODUCTO
  48.     WHERE
  49.     (VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
  50.     AND
  51.     (PRODUCTOS.DEPARTAMENTO_CODIGO='101')
  52.     INTO :ENSREG_CANT, :ENSREG_MONTO;
  53.    
  54.     SELECT
  55.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
  56.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.total_base_imponible,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.total_base_imponible,0))) AS monto
  57.     FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO JOIN PRODUCTOS ON VENTAS_DETALLES.PRODUCTO_CODIGO=productos.CODIGO_PRODUCTO
  58.     WHERE
  59.     (VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
  60.     AND
  61.     (PRODUCTOS.DEPARTAMENTO_CODIGO='10')    
  62.     INTO :ENSGDE_CANT, :ENSGDE_MONTO;
  63.    
  64.     SELECT
  65.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
  66.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.total_base_imponible,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.total_base_imponible,0))) AS monto
  67.     FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO JOIN PRODUCTOS ON VENTAS_DETALLES.PRODUCTO_CODIGO=productos.CODIGO_PRODUCTO
  68.     WHERE
  69.     (VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
  70.     AND
  71.     (PRODUCTOS.DEPARTAMENTO_CODIGO='06')
  72.     INTO :SAND_CANT, :SAND_MONTO;
  73.    
  74.     SELECT
  75.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
  76.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.total_base_imponible,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.total_base_imponible,0))) AS monto
  77.     FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO JOIN PRODUCTOS ON VENTAS_DETALLES.PRODUCTO_CODIGO=productos.CODIGO_PRODUCTO
  78.     WHERE
  79.     (VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
  80.     AND
  81.     (PRODUCTOS.DEPARTAMENTO_CODIGO='11')
  82.     INTO :POST_CANT, :POST_MONTO;
  83.    
  84.     SELECT
  85.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
  86.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.total_base_imponible,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.total_base_imponible,0))) AS monto
  87.     FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO
  88.     WHERE
  89.     (VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
  90.     AND
  91.     (VENTAS_DETALLES.PRODUCTO_NOMBRE = 'CREMA DEL DIA')
  92.     INTO :CREM_CANT, :CREM_MONTO;
  93.    
  94.     SELECT
  95.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
  96.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.total_base_imponible,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.total_base_imponible,0))) AS monto
  97.     FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO JOIN PRODUCTOS ON VENTAS_DETALLES.PRODUCTO_CODIGO=productos.CODIGO_PRODUCTO
  98.     WHERE
  99.         (VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
  100.     AND
  101.         (PRODUCTOS.DEPARTAMENTO_CODIGO='05')
  102.     INTO :MINIS_CANT, :MINIS_MONTO;
  103.    
  104.     SELECT
  105.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
  106.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.total_base_imponible,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.total_base_imponible,0))) AS monto
  107.     FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO JOIN PRODUCTOS ON VENTAS_DETALLES.PRODUCTO_CODIGO=productos.CODIGO_PRODUCTO
  108.     WHERE
  109.         (VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
  110.     AND
  111.         (PRODUCTOS.DEPARTAMENTO_CODIGO='09')
  112.     INTO :ADC_CANT, :ADC_MONTO;
  113.    
  114.     SELECT
  115.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
  116.     (SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.total_base_imponible,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.total_base_imponible,0))) AS monto
  117.     FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO JOIN PRODUCTOS ON VENTAS_DETALLES.PRODUCTO_CODIGO=productos.CODIGO_PRODUCTO
  118.     WHERE
  119.         (VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
  120.     AND
  121.         (PRODUCTOS.DEPARTAMENTO_CODIGO='12')
  122.     INTO :DESA_CANT, :DESA_MONTO;
  123.    
  124.     SELECT
  125.     (SUM(IIF(VENTAS.tipo_documento = 'FAC' AND PRODUCTOS.CODIGO_PRODUCTO = '12019',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV' AND PRODUCTOS.CODIGO_PRODUCTO = '12019',ventas_detalles.CANTIDAD,0))) AS wrapENS,
  126.     (SUM(IIF(VENTAS.tipo_documento = 'FAC' AND PRODUCTOS.CODIGO_PRODUCTO = '12020',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV' AND PRODUCTOS.CODIGO_PRODUCTO = '12020',ventas_detalles.CANTIDAD,0))) AS wrapSAN
  127.     FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO JOIN PRODUCTOS ON VENTAS_DETALLES.PRODUCTO_CODIGO=productos.CODIGO_PRODUCTO
  128.     WHERE
  129.         (VENTAS.FECHA_EMISION BETWEEN '2012.12.01' AND '2012.12.31')
  130.     INTO :WRAP_ENS, :WRAP_SUB;
  131.    
  132.     SUSPEND;
  133.     END
  134. END
  135. ^
  136. SET TERM ; ^
Como veran consulto cada dato que necesito y lo guardo dentro de una Var, ahora el procedure lo ejecuto asi desde un BAT

"isql HOST:"C:\VALERY_POS\datos\valery.mdf" -user 'SYSDBA' -password 'masterkey' -i procedure_producots.sql"

y el .SQL
"delete from numeros;
commit;
execute procedure indicadores_ventas_por_producto('2013.01.01','2013 .01.31');
commit;
quit;"

Como puedo hacer para que el procedure me Retorne algo como
"INSERT INTO indicadores_ventas_xproducto(ID_FRANQUICIA,TE_CANT ,TE_MONTO,ENSREG_CANT,ENSREG_MONTO,ENSGDE_CANT,ENS GDE_MONTO,SAND_CANT,SAND_MONTO,POST_CANT,POST_MONT O,CREM_CANT,CREM_MONTO,MINIS_CANT,MINIS_MONTO,ADC_ CANT,ADC_MONTO,DESA_CANT,DESA_MONTO,WRAP_ENS,WRAP_ SUB,FEC_REG)
VALUES(:FRANQ,:TE_CANT,:TE_MONTO,:ENSREG_CANT,:ENS REG_MONTO,:ENSGDE_CANT,:ENSGDE_MONTO,:SAND_CANT,:S AND_MONTO,:POST_CANT,:POST_MONTO,:CREM_CANT,:CREM_ MONTO,:MINIS_CANT,:MINIS_MONTO,:ADC_CANT,:ADC_MONT O,:DESA_CANT,:DESA_MONTO,:WRAP_ENS,:WRAP_SUB,:FEC_ REG);"
y dicha cadena poderla leer desde el bat? alguna idea?