procedure para concatenar campos

Delphi

19/01/2007

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á..............


Placido

Placido

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

19/01/2007

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



GOSTEI 0
POSTAR