Pular para o conteúdo
  • Este tópico contém 11 respostas, 3 vozes e foi atualizado pela última vez 15 anos, 9 meses atrás por MARCIO_LOK.
Visualizando 12 posts - 1 até 12 (de 12 do total)
  • Autor
    Posts
  • #94311
    MARCIO_LOK
    Participante

      Bom dia pessoal

      Tenho um campo acho tem a seguinte informacao:

      Codigo:
      1
      12
      123
      1236
      14566
      186455

      eu precisaria colocar um espaço entre eles, tipo assim:
      1
      1 2
      1 2 3
      1 2 3 6
      1 4 5 6 6
      1 8 6 4 5 5
      Alguem pode me ajudar?

      Marcio

      #94312
      Avatar photoLeonardo Litz
      Participante

        Use um um loop:


        declare

        v_string varchar2(20):= '123456';
        v_string_retorno varchar2(40);
        begin

        for dd in 1..length(v_string) loop

        v_string_retorno := v_string_retorno||(substr(v_string,dd,1)||' ');

        end loop;

        dbms_output.put_line(v_string_retorno);

        end;

        Value Leonardo Litz

        #94314
        MARCIO_LOK
        Participante

          Só esqueci de mencionar que esse campo está dentro de um select…

          exemplo

          select codconta, desricao, valor
          from tabela

          esta assim:
          1 Ativo 345.88
          12 Qualquer Coisa 5678,99
          123 Teste 567.99
          4567 Teste2 666.88

          queria que ficasse assim:
          1 Ativo 345.88
          1 2 Qualquer Coisa 5678,99
          1 2 3 Teste 567.99
          4 5 6 7 Teste2 666.88

          Ou seja identico, so que o codigo separado.
          Obrigado

          #94316
          Avatar photoLeonardo Litz
          Participante

            Crie uma função que recebe a string como parametro e retorne à formatada, utilizando o algoritmo que escrevi acima. Assim você poderá utiliza-la em um select.

            Vlw Leonardo Litz

            #94317
            MARCIO_LOK
            Participante

              humm

              esse é o problema, nao sei criar funcao……
              pode me ajudar, para criar essa funcao?
              Valeu

              #94318
              Avatar photoLeonardo Litz
              Participante

                Assim:


                create or replace function fnc_poe_espacos(p_string in varchar2)
                return varchar2

                v_string_retorno varchar2(40);
                begin

                for dd in 1..length(p_string) loop

                v_string_retorno := v_string_retorno||(substr(p_string,dd,1)||' ');

                end loop;

                return (v_string_retorno);

                end;

                E para executar:

                select fnc_poe_espaco(coluna)
                from table;

                Vlw Leonardo Litz

                #94319
                MARCIO_LOK
                Participante

                  Ola,

                  Executei o primeiro script, ok ele executou com sucesso, depois fui aplicar no select, ele deu a seguinte mensagem…

                  ORA-06575: Pacote ou função ESPACOS está em um estado inválido

                  Passos que executei:

                  create or replace function fnc_poe_espacos(p_string in varchar2)
                  return varchar2
                  v_string_retorno varchar2(40);
                  begin
                  for dd in 1..length(p_string) loop
                  v_string_retorno := v_string_retorno||(substr(p_string,dd,1)||’ ‘);
                  end loop;
                  return (v_string_retorno);
                  end;

                  depois:

                  select fnc_poe_espacos(codConta) from cconta;

                  Dai retornou essa mensagem:
                  ORA-06575: Pacote ou função ESPACOS está em um estado inválido

                  O que seria isso amigo?
                  Obrigado

                  #94320
                  Avatar photoLeonardo Litz
                  Participante

                    Compila denovo a function, havia um erro de sintaxe.

                    create or replace function fnc_poe_espacos(p_string in varchar2)
                    return varchar2
                    is
                    v_string_retorno varchar2(40);
                    begin
                    for dd in 1..length(p_string) loop
                    v_string_retorno := v_string_retorno||(substr(p_string,dd,1)||' ');
                    end loop;
                    return (v_string_retorno);
                    end;

                    Vlw Leonardo Litz

                    #94322
                    MARCIO_LOK
                    Participante

                      Opa… ele deu o seguinte erro:

                      Ele executa a funcao mais da o seguinte erro:
                      Create function, executed in 0.017 sec.
                      PLS-00103: Encontrado o símbolo “V_STRING_RETORNO” quando um dos seguintes símbolos era esperado:

                      . @ % ; is authid as cluster order using external character
                      deterministic parallel_enable pipelined aggregate
                      O símbolo “is” foi substituído por “V_STRING_RETORNO” para continuar.
                      Valeu

                      #94323
                      MARCIO_LOK
                      Participante

                        Rapaz, parabens

                        Muito obrigado, ficou perfeito, tenha um bom dia, valeu mesmo
                        Deus abencoe

                        Marcio

                        #94324
                        burga
                        Participante

                          Só pra constar, uma outra solução para o seu problema seria usar expressão regular, caso você esteja utilizando o Oracle 10g ou mais recente:

                          SELECT REGEXP_REPLACE(13232124, '(.)', '1 ') FROM dual;

                          😀

                          #94325
                          MARCIO_LOK
                          Participante

                            valeu

                          Visualizando 12 posts - 1 até 12 (de 12 do total)
                          • Você deve fazer login para responder a este tópico.