Pular para o conteúdo
  • Este tópico contém 4 respostas, 3 vozes e foi atualizado pela última vez 16 anos, 1 mês atrás por fsitja.
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #90818
    airoosp
    Participante

      Boa tarde,

      Tenho uma tabela que contém um campo do tipo long e o mesmo contém espaços após a última letra do texto. O problema é que não consigo retirar estes espaços pois para este tipo de campo as funções trim, substr, instr não funcionam.
      Fiz algumas pesquisas e vi é que possível converter este tipo de campo para CLOB e dessa forma é possível utilizar algumas funções.
      Consegui fazer a conversão mas no momento que é utilizada a função TRIM os espaços continuam e a função não funciona e também não retorna erro.
      Tentei utilizar o DBMS_LOB.TRIM() para resolver mas é uma procedure. Alguém tem alguma idéia e/ou dica para resolver este problema, utilizo banco 9i.

      Obrigado.

      Airton

      #90823
      rwarstat
      Participante

        Airton

        Vê se esse link te ajuda.
        http://www.psoug.org/reference/dbms_lob.html

        []´s
        Roberto

        #90892
        fsitja
        Participante

          [quote=”airoosp”:58tx9jiu]Boa tarde,

          Tenho uma tabela que contém um campo do tipo long e o mesmo contém espaços após a última letra do texto. O problema é que não consigo retirar estes espaços pois para este tipo de campo as funções trim, substr, instr não funcionam.
          Fiz algumas pesquisas e vi é que possível converter este tipo de campo para CLOB e dessa forma é possível utilizar algumas funções.
          Consegui fazer a conversão mas no momento que é utilizada a função TRIM os espaços continuam e a função não funciona e também não retorna erro.
          Tentei utilizar o DBMS_LOB.TRIM() para resolver mas é uma procedure. Alguém tem alguma idéia e/ou dica para resolver este problema, utilizo banco 9i.

          Obrigado.

          Airton[/quote]

          O Trim do DBMS_LOB é diferente do TRIM para varchar2, porque nele você não pode informar qual o caracter que está no fim da string que você quer deletar (no seu caso o espaço em branco). Ele permite apenas informar o número de caracteres que você deseja tirar do final do seu CLOB.

          O que você pode fazer é usar ele conjugado com DBMS_LOB.INSTR e SUBSTR, buscando por espaços consecutivos no final do lob e depois dando TRIM até essa última posição.

          Fica um pouco mais difícil com LOB porque as funções de CLOB não aceitam offset negativo nem expressões regulares igual no varchar2… então tô achando que vai ser necessário implementar um loop, por pior que pareça.

          Só que isso tudo assume que você vai querer transformar seu LONG em LOB, claro.

          #90893
          airoosp
          Participante

            Bom dia,

            Entendi, só que estive verificando melhor o conteúdo do campo long e descobri que não são espaços em branco e sim o line feed, código 10 da tabela ascii.
            Criei outra tabela com a mesma estrutura da tabela inicial e depois mudei o tipo de campo de long para clob. Após isso executei o translate substituíndo o line feed por espaço e depois executei o trim.

            Exemplo: translate(criterio,chr(10),’ ‘)

            Pelo que percebi o campo do tipo long tem algumas limitações pois não aceita os comandos trim, substr, instr, translate.
            Alguém conhece alguma forma de executar os comandos acima para campo tipo long. ( banco 9i ).

            Obrigado.

            Airton

            #90907
            fsitja
            Participante

              Só fica atento que quando você passa um CLOB no translate ele faz uma conversão implícita para VARCHAR2, automaticamente eliminando qualquer conteúdo após o caractere 4000.

              Quanto a long, não tenho experiência em usar esse data type, creio que não vou poder ajudar muito.

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