Fórum Passar valor para parametro IN para a STORED PROCEDURE #365910
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.
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
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)