- Este tópico contém 4 respostas, 3 vozes e foi atualizado pela última vez 16 anos, 1 mês atrás por
fsitja.
-
AutorPosts
-
10 de novembro de 2009 às 9:46 pm #90818
airoosp
ParticipanteBoa 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
10 de novembro de 2009 às 10:38 pm #90823rwarstat
Participante13 de novembro de 2009 às 5:17 am #90892fsitja
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.
13 de novembro de 2009 às 3:35 pm #90893airoosp
ParticipanteBom 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
13 de novembro de 2009 às 6:04 pm #90907fsitja
ParticipanteSó 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.
-
AutorPosts
- Você deve fazer login para responder a este tópico.