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 originalSET TERM ^ ;
CREATE OR ALTER PROCEDURE indicadores_ventas_por_producto (INICIAL DATE, FINAL DATE)
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
)
AS
BEGIN
BEGIN
/* Variable de la Franquicia */
FRANQ = 14;
TE_CANT = 0;
TE_MONTO = 0;
ENSREG_CANT = 0;
ENSREG_MONTO = 0;
ENSGDE_CANT = 0;
ENSGDE_MONTO = 0;
SAND_CANT = 0;
SAND_MONTO = 0;
POST_CANT = 0;
POST_MONTO = 0;
CREM_CANT = 0;
CREM_MONTO = 0;
MINIS_CANT = 0;
MINIS_MONTO = 0;
ADC_CANT = 0;
ADC_MONTO = 0;
DESA_CANT = 0;
DESA_MONTO = 0;
WRAP_ENS = 0;
WRAP_SUB = 0;
FEC_REG = :INICIAL;
SELECT
(SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
(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
FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO
WHERE
(VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
AND
(VENTAS_DETALLES.PRODUCTO_NOMBRE LIKE 'TE %')
INTO :TE_CANT, :TE_MONTO;
SELECT
(SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
(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
FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO JOIN PRODUCTOS ON VENTAS_DETALLES.PRODUCTO_CODIGO=productos.CODIGO_PRODUCTO
WHERE
(VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
AND
(PRODUCTOS.DEPARTAMENTO_CODIGO='101')
INTO :ENSREG_CANT, :ENSREG_MONTO;
SELECT
(SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
(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
FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO JOIN PRODUCTOS ON VENTAS_DETALLES.PRODUCTO_CODIGO=productos.CODIGO_PRODUCTO
WHERE
(VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
AND
(PRODUCTOS.DEPARTAMENTO_CODIGO='10')
INTO :ENSGDE_CANT, :ENSGDE_MONTO;
SELECT
(SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
(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
FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO JOIN PRODUCTOS ON VENTAS_DETALLES.PRODUCTO_CODIGO=productos.CODIGO_PRODUCTO
WHERE
(VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
AND
(PRODUCTOS.DEPARTAMENTO_CODIGO='06')
INTO :SAND_CANT, :SAND_MONTO;
SELECT
(SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
(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
FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO JOIN PRODUCTOS ON VENTAS_DETALLES.PRODUCTO_CODIGO=productos.CODIGO_PRODUCTO
WHERE
(VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
AND
(PRODUCTOS.DEPARTAMENTO_CODIGO='11')
INTO :POST_CANT, :POST_MONTO;
SELECT
(SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
(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
FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO
WHERE
(VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
AND
(VENTAS_DETALLES.PRODUCTO_NOMBRE = 'CREMA DEL DIA')
INTO :CREM_CANT, :CREM_MONTO;
SELECT
(SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
(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
FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO JOIN PRODUCTOS ON VENTAS_DETALLES.PRODUCTO_CODIGO=productos.CODIGO_PRODUCTO
WHERE
(VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
AND
(PRODUCTOS.DEPARTAMENTO_CODIGO='05')
INTO :MINIS_CANT, :MINIS_MONTO;
SELECT
(SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
(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
FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO JOIN PRODUCTOS ON VENTAS_DETALLES.PRODUCTO_CODIGO=productos.CODIGO_PRODUCTO
WHERE
(VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
AND
(PRODUCTOS.DEPARTAMENTO_CODIGO='09')
INTO :ADC_CANT, :ADC_MONTO;
SELECT
(SUM(IIF(VENTAS.tipo_documento = 'FAC',ventas_detalles.CANTIDAD,0))-SUM(IIF(VENTAS.tipo_documento = 'DEV',ventas_detalles.CANTIDAD,0))) AS cantidad,
(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
FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO JOIN PRODUCTOS ON VENTAS_DETALLES.PRODUCTO_CODIGO=productos.CODIGO_PRODUCTO
WHERE
(VENTAS.FECHA_EMISION BETWEEN :INICIAL AND :FINAL)
AND
(PRODUCTOS.DEPARTAMENTO_CODIGO='12')
INTO :DESA_CANT, :DESA_MONTO;
SELECT
(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,
(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
FROM ventas_detalles JOIN ventas ON VENTAS_DETALLES.CORRELATIVO_PRINCIPAL=ventas.CORRELATIVO JOIN PRODUCTOS ON VENTAS_DETALLES.PRODUCTO_CODIGO=productos.CODIGO_PRODUCTO
WHERE
(VENTAS.FECHA_EMISION BETWEEN '2012.12.01' AND '2012.12.31')
INTO :WRAP_ENS, :WRAP_SUB;
SUSPEND;
END
END
^
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?