none
Stored Procedure RRS feed

  • Pergunta

  • Opa pessoal,

    tenho esta stored procedure no firebird, quero levar para SQL so que nao ta rolando...

    create procedure  SP_RETORNA_TELEFONES_AGREGADO (
        QTD_TELEFONES integer,
        CODIGOAGREGADO numeric(18,0))
    returns (
        R_TELEFONES varchar(200))
    as
    declare variable TELEFONES varchar(200);
    declare variable I integer;
    begin
      TELEFONES = '';
      I = 0;
      for select substring(T.DESCRICAOTIPOFONE from 1 for 3) || ': ' || coalesce('(' || F.DDD || ')', '') || F.TELEFONE
          from FONEAGREGADO F
          join TIPOFONE T on (T.CODIGOTIPOFONE = F.CODIGOTIPOFONE)
          where F.CODIGOAGREGADO = :CODIGOAGREGADO and
                ((F.CODIGOTIPOFONE < 6 and
                F.CORRESPONDENCIA = 1) or (not exists(select 1
                                                      from FONEAGREGADO
                                                      where CODIGOAGREGADO = F.CODIGOAGREGADO and
                                                            CORRESPONDENCIA = 1 and
                                                            CODIGOTIPOFONE < 6)) and
                F.CODIGOTIPOFONE < 6)
          order by F.CODIGOTIPOFONE desc, F.ITEMFONE
          into R_TELEFONES
      do
      begin
        if (R_TELEFONES is not null) then
        begin
          if (I < :QTD_TELEFONES) then
          begin
            if (trim(TELEFONES) = '') then
            begin
              TELEFONES = TELEFONES || R_TELEFONES;
            end
            else
            begin
              TELEFONES = TELEFONES || ' / ' || R_TELEFONES;
            end
            I = I + 1;
          end
          R_TELEFONES = TELEFONES;
        end
      end
      suspend;
    end

    Ajuda!!

    Vlw

    Fernando


    segunda-feira, 10 de setembro de 2018 18:33

Respostas

  • Boa noite,

    burga1, não sei se entendi corretamente a sua procedure mas segue uma sugestão para testes:

    create procedure PROC_RETORNA_TELEFONES_AGREGADO
        QTD_TELEFONES integer,
        CODIGOAGREGADO numeric(18,0),
        R_TELEFONES varchar(200) output
    as
    begin
    
    set @R_TELEFONES =
        STUFF
            ((select top(@QTD_TELEFONES)
                  ' / ' +
                  substring(T.DESCRICAOTIPOFONE, 1, 3) + ': ' + 
                  coalesce('(' + F.DDD + ')', '') + 
                  F.TELEFONE
              from FONEAGREGADO F
              inner join TIPOFONE T 
                  on T.CODIGOTIPOFONE = F.CODIGOTIPOFONE
              where 
                  F.CODIGOAGREGADO = @CODIGOAGREGADO and
                  F.CODIGOTIPOFONE < 6 and
                  ((F.CORRESPONDENCIA = 1) or 
                   (not exists
                        (select 1 
                         from FONEAGREGADO S
                         where 
                             S.CODIGOAGREGADO = F.CODIGOAGREGADO and
                             S.CORRESPONDENCIA = 1 and
                             S.CODIGOTIPOFONE < 6)))
              order by 
                  F.CODIGOTIPOFONE desc, 
                  F.ITEMFONE
              FOR XML PATH(''), TYPE).value('.', 'varchar(200)'),
             1,
             3,
             '');
    
    end
    

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 11 de setembro de 2018 01:00

Todas as Respostas

  • Deleted
    segunda-feira, 10 de setembro de 2018 22:35
  • Boa noite,

    burga1, não sei se entendi corretamente a sua procedure mas segue uma sugestão para testes:

    create procedure PROC_RETORNA_TELEFONES_AGREGADO
        QTD_TELEFONES integer,
        CODIGOAGREGADO numeric(18,0),
        R_TELEFONES varchar(200) output
    as
    begin
    
    set @R_TELEFONES =
        STUFF
            ((select top(@QTD_TELEFONES)
                  ' / ' +
                  substring(T.DESCRICAOTIPOFONE, 1, 3) + ': ' + 
                  coalesce('(' + F.DDD + ')', '') + 
                  F.TELEFONE
              from FONEAGREGADO F
              inner join TIPOFONE T 
                  on T.CODIGOTIPOFONE = F.CODIGOTIPOFONE
              where 
                  F.CODIGOAGREGADO = @CODIGOAGREGADO and
                  F.CODIGOTIPOFONE < 6 and
                  ((F.CORRESPONDENCIA = 1) or 
                   (not exists
                        (select 1 
                         from FONEAGREGADO S
                         where 
                             S.CODIGOAGREGADO = F.CODIGOAGREGADO and
                             S.CORRESPONDENCIA = 1 and
                             S.CODIGOTIPOFONE < 6)))
              order by 
                  F.CODIGOTIPOFONE desc, 
                  F.ITEMFONE
              FOR XML PATH(''), TYPE).value('.', 'varchar(200)'),
             1,
             3,
             '');
    
    end
    

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 11 de setembro de 2018 01:00
  • Obrigado a Todos!!!

    Consegui fazer , um pouco mais complexo q o Firebird

    Att

    Burga

    quinta-feira, 13 de setembro de 2018 16:52