PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Passar valor para parametro IN para a STORED PROCEDURE #60287

07/11/2008

0

Tenho a Seguinte SP:

DROP PROCEDURE UP_TOTALIZA_ITENS_PED_MES;

SET TERM ^ ;

CREATE PROCEDURE UP_TOTALIZA_ITENS_PED_MES (
CODREPRTOT INTEGER,
DATAPED1 TIMESTAMP,
DATAPED2 TIMESTAMP,
ANOTOT SMALLINT,
MESTOT SMALLINT,
CODITEMTOT CHAR(25),
CODREFTOT CHAR(16),
CODREGIAO INTEGER,
CIDADES VARCHAR(200)
)
RETURNS (
QUANTIDADE FLOAT)
AS
BEGIN
IF ((CODREGIAO = 0) AND (CIDADES = ´´)) THEN
SELECT SUM(IPV.QUANTIDADE)
FROM ITEMPEDVENDA IPV, PEDVENDA PV
WHERE PV.CODREPRESENTADA = :CODREPRTOT
AND PV.SITUACAO <> 2
AND PV.DATAPEDIDO BETWEEN :DATAPED1 AND :DATAPED2
AND EXTRACT(YEAR FROM PV.DATAPEDIDO) = :ANOTOT
AND EXTRACT(MONTH FROM PV.DATAPEDIDO) = :MESTOT
AND IPV.NUMPEDVENDA = PV.NUMPEDVENDA
AND IPV.CODITEM = :CODITEMTOT
AND IPV.CODREFERENCIA = :CODREFTOT
INTO :QUANTIDADE;
ELSE IF ((CODREGIAO > 0) AND (CIDADES = ´´)) THEN
SELECT SUM(IPV.QUANTIDADE)
FROM ITEMPEDVENDA IPV, PEDVENDA PV, CLIENTE, ENDERECO,
REGIOESCIDADES
WHERE PV.CODREPRESENTADA = :CODREPRTOT
AND PV.SITUACAO <> 2
AND PV.DATAPEDIDO BETWEEN :DATAPED1 AND :DATAPED2
AND EXTRACT(YEAR FROM PV.DATAPEDIDO) = :ANOTOT
AND EXTRACT(MONTH FROM PV.DATAPEDIDO) = :MESTOT
AND IPV.NUMPEDVENDA = PV.NUMPEDVENDA
AND IPV.CODITEM = :CODITEMTOT
AND IPV.CODREFERENCIA = :CODREFTOT
AND PV.CODCLIENTE = CLIENTE.CODCLIENTE
AND ENDERECO.CODEMITENTE = CLIENTE.CODEMITENTE
AND ENDERECO.CODENDERECO = CLIENTE.CODENDERECOPRINC
AND REGIOESCIDADES.CIDADE = ENDERECO.CIDADE
AND REGIOESCIDADES.CODREGIAO = :CODREGIAO
INTO :QUANTIDADE;
ELSE IF ((CIDADES <> ´´) AND (CODREGIAO = 0)) THEN
SELECT SUM(IPV.QUANTIDADE)
FROM ITEMPEDVENDA IPV, PEDVENDA PV, CLIENTE, ENDERECO,
REGIOESCIDADES
WHERE PV.CODREPRESENTADA = :CODREPRTOT
AND PV.SITUACAO <> 2
AND PV.DATAPEDIDO BETWEEN :DATAPED1 AND :DATAPED2
AND EXTRACT(YEAR FROM PV.DATAPEDIDO) = :ANOTOT
AND EXTRACT(MONTH FROM PV.DATAPEDIDO) = :MESTOT
AND IPV.NUMPEDVENDA = PV.NUMPEDVENDA
AND IPV.CODITEM = :CODITEMTOT
AND IPV.CODREFERENCIA = :CODREFTOT
AND PV.CODCLIENTE = CLIENTE.CODCLIENTE
AND ENDERECO.CODEMITENTE = CLIENTE.CODEMITENTE
AND ENDERECO.CODENDERECO = CLIENTE.CODENDERECOPRINC
AND REGIOESCIDADES.CIDADE = ENDERECO.CIDADE
AND REGIOESCIDADES.CIDADE IN (:CIDADES)
INTO :QUANTIDADE;
ELSE
SELECT SUM(IPV.QUANTIDADE)
FROM ITEMPEDVENDA IPV, PEDVENDA PV, CLIENTE, ENDERECO,
REGIOESCIDADES
WHERE PV.CODREPRESENTADA = :CODREPRTOT
AND PV.SITUACAO <> 2
AND PV.DATAPEDIDO BETWEEN :DATAPED1 AND :DATAPED2
AND EXTRACT(YEAR FROM PV.DATAPEDIDO) = :ANOTOT
AND EXTRACT(MONTH FROM PV.DATAPEDIDO) = :MESTOT
AND IPV.NUMPEDVENDA = PV.NUMPEDVENDA
AND IPV.CODITEM = :CODITEMTOT
AND IPV.CODREFERENCIA = :CODREFTOT
AND PV.CODCLIENTE = CLIENTE.CODCLIENTE
AND ENDERECO.CODEMITENTE = CLIENTE.CODEMITENTE
AND ENDERECO.CODENDERECO = CLIENTE.CODENDERECOPRINC
AND REGIOESCIDADES.CIDADE = ENDERECO.CIDADE
AND REGIOESCIDADES.CODREGIAO = :CODREGIAO
AND REGIOESCIDADES.CIDADE IN (:CIDADES)
INTO :QUANTIDADE;


SUSPEND;
END ^

SET TERM ; ^


Quando passo somente uma cidade funciona legal, porem quando passo mais de uma cidade não retona a totalização corrente.

Alguem tem alguma ideia de como fazer para conseguir passar uma cadeia de valores para o parametro ´IN´?

Grato.


Andreaskaquino

Andreaskaquino

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar