Error de syntaxis en funcion
Publicado por Error de syntaxis en funcion (2 intervenciones) el 15/11/2014 18:28:36
Hola, estoy tratando de hacer la siguiente función y que recibe parametros que pueden ser null, y me retorna una tabla como resultado de la consulta, esta es mi función:
CREATE FUNCTION ventasProv(suc int,prov int,prod int,anio int, mes1 int,mes2 int)
RETURNS TABLE (refe text,nom text,ene real,feb real,mar real,abr real,may real,
jun real,jul real,ago real,sep real,oct real,nov real,dic real, tot real) AS
$BODY$
BEGIN
IF $1 IS NULL AND $2 IS NULL AND $3 IS NULL THEN
RETURN QUERY SELECT p.referencia,
p.nombre,
SUM(CASE WHEN extract(month from v.fecha_venta)=1 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=2 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=3 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=4 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=5 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=6 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=7 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=8 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=9 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=10 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=11 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=12 THEN d.cantidad ElSE 0 END),
SUM(d.cantidad)
from venta_prod_serv v inner join det_venta_prod_serv d on v.vtaprsv_id=d.venta_id inner join producto p on d.producto_id=p.id
WHERE (EXTRACT(YEAR FROM v.fecha_venta)=$4 AND EXTRACT(MONTH FROM v.fecha_venta) between $5 and $6)
group by v.sucursal_id,p.proveedor_id,p.referencia,p.nombre
order by p.nombre;
END IF;
IF $1 IS NOT NULL AND $2 IS NOT NULL AND $3 IS NOT NULL THEN
RETURN QUERY SELECT p.referencia,
p.nombre,
SUM(CASE WHEN extract(month from v.fecha_venta)=1 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=2 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=3 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=4 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=5 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=6 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=7 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=8 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=9 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=10 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=11 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=12 THEN d.cantidad ElSE 0 END),
SUM(d.cantidad)
from venta_prod_serv v inner join det_venta_prod_serv d on v.vtaprsv_id=d.venta_id inner join producto p on d.producto_id=p.id
WHERE v.sucursal_id=$1 AND p.proveedor_id=$2 AND d.producto_id=$3
AND (EXTRACT(YEAR FROM v.fecha_venta)=$4 AND EXTRACT(MONTH FROM v.fecha_venta) between $5 and $6)
group by v.sucursal_id,p.proveedor_id,p.referencia,p.nombre
order by p.nombre;
END IF;
IF $1 IS NOT NULL AND $2 IS NOT NULL AND $3 IS NULL THEN
RETURN QUERY SELECT p.referencia,
p.nombre,
SUM(CASE WHEN extract(month from v.fecha_venta)=1 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=2 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=3 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=4 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=5 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=6 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=7 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=8 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=9 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=10 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=11 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=12 THEN d.cantidad ElSE 0 END),
SUM(d.cantidad)
from venta_prod_serv v inner join det_venta_prod_serv d on v.vtaprsv_id=d.venta_id inner join producto p on d.producto_id=p.id
WHERE v.sucursal_id=$1 AND p.proveedor_id=$2
AND (EXTRACT(YEAR FROM v.fecha_venta)=$4 AND EXTRACT(MONTH FROM v.fecha_venta) between $5 and $6)
group by v.sucursal_id,p.proveedor_id,p.referencia,p.nombre
order by p.nombre;
END IF;
IF $1 IS NOT NULL AND $2 IS NULL AND $3 IS NOT NULL THEN
RETURN QUERY SELECT p.referencia,
p.nombre,
SUM(CASE WHEN extract(month from v.fecha_venta)=1 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=2 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=3 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=4 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=5 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=6 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=7 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=8 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=9 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=10 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=11 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=12 THEN d.cantidad ElSE 0 END),
SUM(d.cantidad)
from venta_prod_serv v inner join det_venta_prod_serv d on v.vtaprsv_id=d.venta_id inner join producto p on d.producto_id=p.id
WHERE v.sucursal_id=$1 AND d.producto_id=$3
AND (EXTRACT(YEAR FROM v.fecha_venta)=$4 AND EXTRACT(MONTH FROM v.fecha_venta) between $5 and $6)
group by v.sucursal_id,p.proveedor_id,p.referencia,p.nombre
order by p.nombre;
END IF;
IF $1 IS NULL AND $2 IS NOT NULL AND $3 IS NULL THEN
RETURN QUERY SELECT p.referencia,
p.nombre,
SUM(CASE WHEN extract(month from v.fecha_venta)=1 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=2 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=3 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=4 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=5 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=6 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=7 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=8 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=9 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=10 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=11 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=12 THEN d.cantidad ElSE 0 END),
SUM(d.cantidad)
from venta_prod_serv v inner join det_venta_prod_serv d on v.vtaprsv_id=d.venta_id inner join producto p on d.producto_id=p.id
WHERE p.proveedor_id=$2
AND (EXTRACT(YEAR FROM v.fecha_venta)=$4 AND EXTRACT(MONTH FROM v.fecha_venta) between $5 and $6)
group by v.sucursal_id,p.proveedor_id,p.referencia,p.nombre
order by p.nombre;
END IF;
IF $1 IS NULL AND $2 IS NOT NULL AND $3 IS NOT NULL THEN
RETURN QUERY SELECT p.referencia,
p.nombre,
SUM(CASE WHEN extract(month from v.fecha_venta)=1 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=2 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=3 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=4 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=5 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=6 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=7 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=8 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=9 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=10 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=11 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=12 THEN d.cantidad ElSE 0 END),
SUM(d.cantidad)
from venta_prod_serv v inner join det_venta_prod_serv d on v.vtaprsv_id=d.venta_id inner join producto p on d.producto_id=p.id
WHERE p.proveedor_id=$2 AND d.producto_id=$3
AND (EXTRACT(YEAR FROM v.fecha_venta)=$4 AND EXTRACT(MONTH FROM v.fecha_venta) between $5 and $6)
group by v.sucursal_id,p.proveedor_id,p.referencia,p.nombre
order by p.nombre;
END IF;
IF $1 IS NULL AND $2 IS NULL AND $3 IS NOT NULL THEN
RETURN QUERY SELECT p.referencia,
p.nombre,
SUM(CASE WHEN extract(month from v.fecha_venta)=1 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=2 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=3 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=4 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=5 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=6 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=7 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=8 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=9 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=10 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=11 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=12 THEN d.cantidad ElSE 0 END),
SUM(d.cantidad)
from venta_prod_serv v inner join det_venta_prod_serv d on v.vtaprsv_id=d.venta_id inner join producto p on d.producto_id=p.id
WHERE d.producto_id=$3
AND (EXTRACT(YEAR FROM v.fecha_venta)=$4 AND EXTRACT(MONTH FROM v.fecha_venta) between $5 and $6)
group by v.sucursal_id,p.proveedor_id,p.referencia,p.nombre
order by p.nombre;
END IF;
END
$BODY$
LANGUAGE 'sql' volatile CALLED ON NULL INPUT;
Me muestra el siguiente error:
********************************************************************************
ERROR: error de sintaxis en o cerca de «IF»
LINE 5: IF $1 IS NULL AND $2 IS NULL AND $3 IS NULL THEN
^
********** Error **********
ERROR: error de sintaxis en o cerca de «IF»
SQL state: 42601
Character: 253
*********************************************************************************
Alguien sabrá a que se debe este error?
CREATE FUNCTION ventasProv(suc int,prov int,prod int,anio int, mes1 int,mes2 int)
RETURNS TABLE (refe text,nom text,ene real,feb real,mar real,abr real,may real,
jun real,jul real,ago real,sep real,oct real,nov real,dic real, tot real) AS
$BODY$
BEGIN
IF $1 IS NULL AND $2 IS NULL AND $3 IS NULL THEN
RETURN QUERY SELECT p.referencia,
p.nombre,
SUM(CASE WHEN extract(month from v.fecha_venta)=1 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=2 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=3 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=4 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=5 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=6 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=7 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=8 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=9 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=10 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=11 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=12 THEN d.cantidad ElSE 0 END),
SUM(d.cantidad)
from venta_prod_serv v inner join det_venta_prod_serv d on v.vtaprsv_id=d.venta_id inner join producto p on d.producto_id=p.id
WHERE (EXTRACT(YEAR FROM v.fecha_venta)=$4 AND EXTRACT(MONTH FROM v.fecha_venta) between $5 and $6)
group by v.sucursal_id,p.proveedor_id,p.referencia,p.nombre
order by p.nombre;
END IF;
IF $1 IS NOT NULL AND $2 IS NOT NULL AND $3 IS NOT NULL THEN
RETURN QUERY SELECT p.referencia,
p.nombre,
SUM(CASE WHEN extract(month from v.fecha_venta)=1 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=2 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=3 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=4 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=5 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=6 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=7 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=8 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=9 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=10 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=11 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=12 THEN d.cantidad ElSE 0 END),
SUM(d.cantidad)
from venta_prod_serv v inner join det_venta_prod_serv d on v.vtaprsv_id=d.venta_id inner join producto p on d.producto_id=p.id
WHERE v.sucursal_id=$1 AND p.proveedor_id=$2 AND d.producto_id=$3
AND (EXTRACT(YEAR FROM v.fecha_venta)=$4 AND EXTRACT(MONTH FROM v.fecha_venta) between $5 and $6)
group by v.sucursal_id,p.proveedor_id,p.referencia,p.nombre
order by p.nombre;
END IF;
IF $1 IS NOT NULL AND $2 IS NOT NULL AND $3 IS NULL THEN
RETURN QUERY SELECT p.referencia,
p.nombre,
SUM(CASE WHEN extract(month from v.fecha_venta)=1 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=2 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=3 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=4 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=5 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=6 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=7 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=8 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=9 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=10 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=11 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=12 THEN d.cantidad ElSE 0 END),
SUM(d.cantidad)
from venta_prod_serv v inner join det_venta_prod_serv d on v.vtaprsv_id=d.venta_id inner join producto p on d.producto_id=p.id
WHERE v.sucursal_id=$1 AND p.proveedor_id=$2
AND (EXTRACT(YEAR FROM v.fecha_venta)=$4 AND EXTRACT(MONTH FROM v.fecha_venta) between $5 and $6)
group by v.sucursal_id,p.proveedor_id,p.referencia,p.nombre
order by p.nombre;
END IF;
IF $1 IS NOT NULL AND $2 IS NULL AND $3 IS NOT NULL THEN
RETURN QUERY SELECT p.referencia,
p.nombre,
SUM(CASE WHEN extract(month from v.fecha_venta)=1 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=2 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=3 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=4 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=5 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=6 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=7 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=8 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=9 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=10 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=11 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=12 THEN d.cantidad ElSE 0 END),
SUM(d.cantidad)
from venta_prod_serv v inner join det_venta_prod_serv d on v.vtaprsv_id=d.venta_id inner join producto p on d.producto_id=p.id
WHERE v.sucursal_id=$1 AND d.producto_id=$3
AND (EXTRACT(YEAR FROM v.fecha_venta)=$4 AND EXTRACT(MONTH FROM v.fecha_venta) between $5 and $6)
group by v.sucursal_id,p.proveedor_id,p.referencia,p.nombre
order by p.nombre;
END IF;
IF $1 IS NULL AND $2 IS NOT NULL AND $3 IS NULL THEN
RETURN QUERY SELECT p.referencia,
p.nombre,
SUM(CASE WHEN extract(month from v.fecha_venta)=1 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=2 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=3 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=4 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=5 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=6 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=7 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=8 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=9 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=10 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=11 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=12 THEN d.cantidad ElSE 0 END),
SUM(d.cantidad)
from venta_prod_serv v inner join det_venta_prod_serv d on v.vtaprsv_id=d.venta_id inner join producto p on d.producto_id=p.id
WHERE p.proveedor_id=$2
AND (EXTRACT(YEAR FROM v.fecha_venta)=$4 AND EXTRACT(MONTH FROM v.fecha_venta) between $5 and $6)
group by v.sucursal_id,p.proveedor_id,p.referencia,p.nombre
order by p.nombre;
END IF;
IF $1 IS NULL AND $2 IS NOT NULL AND $3 IS NOT NULL THEN
RETURN QUERY SELECT p.referencia,
p.nombre,
SUM(CASE WHEN extract(month from v.fecha_venta)=1 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=2 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=3 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=4 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=5 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=6 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=7 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=8 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=9 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=10 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=11 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=12 THEN d.cantidad ElSE 0 END),
SUM(d.cantidad)
from venta_prod_serv v inner join det_venta_prod_serv d on v.vtaprsv_id=d.venta_id inner join producto p on d.producto_id=p.id
WHERE p.proveedor_id=$2 AND d.producto_id=$3
AND (EXTRACT(YEAR FROM v.fecha_venta)=$4 AND EXTRACT(MONTH FROM v.fecha_venta) between $5 and $6)
group by v.sucursal_id,p.proveedor_id,p.referencia,p.nombre
order by p.nombre;
END IF;
IF $1 IS NULL AND $2 IS NULL AND $3 IS NOT NULL THEN
RETURN QUERY SELECT p.referencia,
p.nombre,
SUM(CASE WHEN extract(month from v.fecha_venta)=1 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=2 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=3 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=4 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=5 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=6 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=7 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=8 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=9 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=10 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=11 THEN d.cantidad ElSE 0 END),
SUM(CASE WHEN extract(month from v.fecha_venta)=12 THEN d.cantidad ElSE 0 END),
SUM(d.cantidad)
from venta_prod_serv v inner join det_venta_prod_serv d on v.vtaprsv_id=d.venta_id inner join producto p on d.producto_id=p.id
WHERE d.producto_id=$3
AND (EXTRACT(YEAR FROM v.fecha_venta)=$4 AND EXTRACT(MONTH FROM v.fecha_venta) between $5 and $6)
group by v.sucursal_id,p.proveedor_id,p.referencia,p.nombre
order by p.nombre;
END IF;
END
$BODY$
LANGUAGE 'sql' volatile CALLED ON NULL INPUT;
Me muestra el siguiente error:
********************************************************************************
ERROR: error de sintaxis en o cerca de «IF»
LINE 5: IF $1 IS NULL AND $2 IS NULL AND $3 IS NULL THEN
^
********** Error **********
ERROR: error de sintaxis en o cerca de «IF»
SQL state: 42601
Character: 253
*********************************************************************************
Alguien sabrá a que se debe este error?
Valora esta pregunta


0