Fórum procedure para concatenar campos #336501
19/01/2007
0
objetivo - definir uma procedure para gerar o relatorio de pos venda
procedure
definir uma procedure com o nome pposvenda
parametros da procedure
codigo da empresa integer
cidade varchar(25)
retorno
definir uma variavel mdados varchar(80)
procedimentos:
ler a tabela cliente do inicio ao fim
salvando os dados da empresa e cidade passada pelo
parametro
salvar os seguintes dados:
codigo do cliente (integer)
nome do cliente (varchar(50))
endereco do cliente (varchar(50))
cep do endereco (char(8))
telefone do cliente (varchar(15))
data da ultima compra (date)
se o endereco do cliente estiver nulo, mover um caracter em
branco para a variavel do endereco
se o cep do endereco estiver nulo, mover um caracter em
branco para a variavel do cep
se o telefone estiver nulo, mover um caracter em
branco para a variavel do telefone
data da umtima compra usar a funcao max
ler a tabela receber pelo codigo da empresa e pelo codigo
do cliente e salvar a data maaxima da ultima compra do cliente
retornar os campos acima concatenados e com um intervalo de 2 caracteres em branco entre um campo e outro
como vocês viram, esse é o que eu tenho q fazer....
=============
isso aqui foi o que eu fiz:
CREATE PROCEDURE PPOSVENDA (
CODIGO INTEGER,
CIDADE VARCHAR(25))
RETURNS (
MDADOS VARCHAR(136))
AS
DECLARE VARIABLE VCODIGO INTEGER;
DECLARE VARIABLE VNOME VARCHAR(50);
DECLARE VARIABLE VLOGRADOURO VARCHAR(50);
DECLARE VARIABLE VCEP VARCHAR(8);
DECLARE VARIABLE VTELEFONE CHAR(15);
DECLARE VARIABLE VDATAULTIMACOMPRA DATE;
BEGIN
FOR
SELECT CLI_CODIGO,
CLI_NOME,
CLI_LOGRADOUROENDERECO,
CLI_CEP,
CLI_TELEFONE,
CLI_DATAULTIMACOMPRA
FROM cliente
WHERE EMP_CODIGO = :CODIGO AND
CLI_CIDADE like :CIDADE
INTO
:vcodigo,
:vnome,
:vlogradouro,
:vcep,
:vtelefone,
:vdataultimacompra
do
begin
if (vlogradouro IS NULL) then
VLOGRADOURO = ´´;
if (VCEP IS NULL) then
VCEP = ´´;
if (VTELEFONE IS NULL) then
VTELEFONE = ´´;
SELECT MAX(REC_DATAEMISSAO) AS DATAULTIMACOMPRA
FROM RECEBER
WHERE EMP_CODIGO = :CODIGO
INTO
:vdataultimacompra;
MDADOS = :vcodigo||´ ´||:vnome||´ ´||:vlogradouro||´ ´||:vcep||´ ´||:vtelefone||´ ´||:vdataultimacompra;
END
end
qdo eu executo a procedure da tudo certo:
execute procedure pposvenda(:codigo, :cidade)
mas qdo eu faço assim não da certo, porque?
select * from pposvenda(:codigo, :cidade);
ele não traz informação nenhuma na variavel de retorno mdados.....
se alguém souber resolver esse problema, por favor, mande uma resposta....
muito obrigado..............agradeço desde já..............
procedure
definir uma procedure com o nome pposvenda
parametros da procedure
codigo da empresa integer
cidade varchar(25)
retorno
definir uma variavel mdados varchar(80)
procedimentos:
ler a tabela cliente do inicio ao fim
salvando os dados da empresa e cidade passada pelo
parametro
salvar os seguintes dados:
codigo do cliente (integer)
nome do cliente (varchar(50))
endereco do cliente (varchar(50))
cep do endereco (char(8))
telefone do cliente (varchar(15))
data da ultima compra (date)
se o endereco do cliente estiver nulo, mover um caracter em
branco para a variavel do endereco
se o cep do endereco estiver nulo, mover um caracter em
branco para a variavel do cep
se o telefone estiver nulo, mover um caracter em
branco para a variavel do telefone
data da umtima compra usar a funcao max
ler a tabela receber pelo codigo da empresa e pelo codigo
do cliente e salvar a data maaxima da ultima compra do cliente
retornar os campos acima concatenados e com um intervalo de 2 caracteres em branco entre um campo e outro
como vocês viram, esse é o que eu tenho q fazer....
=============
isso aqui foi o que eu fiz:
CREATE PROCEDURE PPOSVENDA (
CODIGO INTEGER,
CIDADE VARCHAR(25))
RETURNS (
MDADOS VARCHAR(136))
AS
DECLARE VARIABLE VCODIGO INTEGER;
DECLARE VARIABLE VNOME VARCHAR(50);
DECLARE VARIABLE VLOGRADOURO VARCHAR(50);
DECLARE VARIABLE VCEP VARCHAR(8);
DECLARE VARIABLE VTELEFONE CHAR(15);
DECLARE VARIABLE VDATAULTIMACOMPRA DATE;
BEGIN
FOR
SELECT CLI_CODIGO,
CLI_NOME,
CLI_LOGRADOUROENDERECO,
CLI_CEP,
CLI_TELEFONE,
CLI_DATAULTIMACOMPRA
FROM cliente
WHERE EMP_CODIGO = :CODIGO AND
CLI_CIDADE like :CIDADE
INTO
:vcodigo,
:vnome,
:vlogradouro,
:vcep,
:vtelefone,
:vdataultimacompra
do
begin
if (vlogradouro IS NULL) then
VLOGRADOURO = ´´;
if (VCEP IS NULL) then
VCEP = ´´;
if (VTELEFONE IS NULL) then
VTELEFONE = ´´;
SELECT MAX(REC_DATAEMISSAO) AS DATAULTIMACOMPRA
FROM RECEBER
WHERE EMP_CODIGO = :CODIGO
INTO
:vdataultimacompra;
MDADOS = :vcodigo||´ ´||:vnome||´ ´||:vlogradouro||´ ´||:vcep||´ ´||:vtelefone||´ ´||:vdataultimacompra;
END
end
qdo eu executo a procedure da tudo certo:
execute procedure pposvenda(:codigo, :cidade)
mas qdo eu faço assim não da certo, porque?
select * from pposvenda(:codigo, :cidade);
ele não traz informação nenhuma na variavel de retorno mdados.....
se alguém souber resolver esse problema, por favor, mande uma resposta....
muito obrigado..............agradeço desde já..............
Placido
Curtir tópico
+ 0
Responder
Posts
19/01/2007
Emerson Nascimento
CREATE PROCEDURE PPOSVENDA ( CODIGO INTEGER, CIDADE VARCHAR(25)) RETURNS ( MDADOS VARCHAR(136)) AS DECLARE VARIABLE VCODIGO INTEGER; DECLARE VARIABLE VNOME VARCHAR(50); DECLARE VARIABLE VLOGRADOURO VARCHAR(50); DECLARE VARIABLE VCEP VARCHAR(Cool; DECLARE VARIABLE VTELEFONE CHAR(15); DECLARE VARIABLE VDATAULTIMACOMPRA DATE; BEGIN FOR SELECT CLI_CODIGO, CLI_NOME, CLI_LOGRADOUROENDERECO, CLI_CEP, CLI_TELEFONE, CLI_DATAULTIMACOMPRA FROM cliente WHERE EMP_CODIGO = :CODIGO AND CLI_CIDADE like :CIDADE INTO :vcodigo, :vnome, :vlogradouro, :vcep, :vtelefone, :vdataultimacompra do begin if (vlogradouro IS NULL) then VLOGRADOURO = ´´; if (VCEP IS NULL) then VCEP = ´´; if (VTELEFONE IS NULL) then VTELEFONE = ´´; SELECT MAX(REC_DATAEMISSAO) AS DATAULTIMACOMPRA FROM RECEBER WHERE EMP_CODIGO = :CODIGO INTO :vdataultimacompra; MDADOS = :vcodigo||´ ´||:vnome||´ ´||:vlogradouro||´ ´||:vcep||´ ´||:vtelefone||´ ´||:vdataultimacompra; suspend; -- faltou o suspend, para "devolver" o registro END end
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)