Página 1 de 1

Contando caracters

Enviado: Qua, 21 Out 2009 12:13 pm
por Pablo
Boa tarde turma...estou precisando saber a quantidade de caracters q tem uma frase....porém, não posso usar o length pois esta frase tem mais de 4mil caracters..alguém sabe algum comando para contar a quantidade de caracter de um campo long ???

abraços

Enviado: Qua, 21 Out 2009 1:07 pm
por SergioLBJr
não consegue quebrar ela em partes e então aplicar o lenght?

Enviado: Qua, 21 Out 2009 1:16 pm
por victorhugomuniz
vê se ajuda

ainda não deu

Enviado: Qua, 21 Out 2009 3:26 pm
por Pablo
Boa tarde turma...
Sérgio, você disse para eu quebrar em "parte"...mas, eu vou passar uma string inteira, e justamente eu quero q o programa quebre a string de 2mil em 2 mil caracter.....se você sabe um script que quebre desta forma, me fale.

Victor, cara, este script não serve para mim (pelo menos eu acho q não...heheh) porque quero fazer uma procedure que recebe um long e devolva 4 variáveis do tipo varchar2 (limitados em 2 mil caracter);;;exemplo, tenho um texto com 5500 caracter, então isso vai ser quebrado e devolvido em 2 variáveis com 2 mil caracter cada e 1 variável com 1500 caracter....
não sei se fui claro, mas em fim...obrigado por enquanto...se tiver alguma luz coloca ai no forum....

valeux

Enviado: Qua, 21 Out 2009 3:39 pm
por SergioLBJr
já tentou usar um SUBSTR?

Selecionar tudo

select * from (select substr('Oi mundo' ,1 , 2) from dual
union 
select substr ('Oi mundo', 3,7) from dual)
order by 1 desc
só um exemplo de aplicação, podes fazer select bem mais uteis nesta lógica

Enviado: Qua, 21 Out 2009 4:20 pm
por Pablo
Sérgio, valeu pela ajuda,,,,mas o Long não é aceito no substr, length, instr, etc...

abraços amigo.

Enviado: Qua, 21 Out 2009 4:21 pm
por victorhugomuniz
faz um to_char antes

não pode??

Enviado: Qua, 21 Out 2009 4:27 pm
por SergioLBJr
Cara , se com o to_char não rolar não sei como te ajudar dae.

Mas se caso tu achar outra solução posta por aew.

Enviado: Qua, 21 Out 2009 4:50 pm
por diegolenhardt
tenta ver se o pacote UTL_RAW te ajuda..

utl_raw.substr
utl_raw.length

Enviado: Qui, 22 Out 2009 7:07 am
por Pablo
Bom dia turma....
Victor, não dá pra fazer um to_char...pois a string é muito grande (ela possui mais de 6mil caracter...) se eu tentar fazer to_char(substr()) também não dá...pois uma string com mais de 4mil posições tem q ser um long...e o long não pode ser utilizado nas funções length, substr, etc......

Diego, cara, tentei usar estas funções, mas dá a mesma mensagem de erro (String literal too long)

vou dar um exemplo do que estou precisando.

Selecionar tudo

xvar1   varchar2(4000);
xvar2   varchar2(4000);

xvar_long long := (recebe 7 mil caracteres...);

begin

   xvar1 := substr(xvar_long,4000);--aqui guardou 4 mil caracter do long

   xvar2 := substr(xvar_long,4000,4000)--aqui termina de "quebrar" o long pegando os últimos caracteres

end;
Turma, se caso vocês sugerirem algum outro tipo de variável que dê para trabalhar com o substr, length, etc. também está valendo....estou "penando" em cima disso...rsrsrs
Galera, obrigado pelo empenho de todos....

Abraços

Enviado: Qui, 22 Out 2009 7:12 am
por SergioLBJr
Cara tenta aplica um substr num espaço menor de caracteres e vê se funciona.

Selecionar tudo

xvar1   varchar2(100); 
xvar2   varchar2(100); 

xvar_long long := (recebe 7 mil caracteres...); 

begin 

   xvar1 := substr(xvar_long,0,100); 

   xvar2 := substr(xvar_long,100,200) 

end;

Enviado: Qui, 22 Out 2009 7:18 am
por Pablo
Bom dia Sérgio....o substr não aceita variáveis do tipo long....nem o substr, nem instr, nem length, e por ai a fora....

abraços amigo.

Enviado: Qui, 22 Out 2009 7:21 am
por SergioLBJr
Tu já tinha falado isso, mas pelo teu exemplo pensei que estava aceitando.

Como este long é gerado??

Enviado: Qui, 22 Out 2009 7:26 am
por Pablo
este long vem do forms 4.5....ele é um "diário de bordo"...o usuário preenche um campo do tipo long, então eu tenho uma procedure que recebe este long e faz um insert na base...porém, preciso q o insert seja feito como varchar2....

valeu amigo.

Enviado: Qui, 22 Out 2009 7:32 am
por SergioLBJr
Este teu campo não pode ser varchar2?

Enviado: Qui, 22 Out 2009 7:38 am
por Pablo
não...não pode porque o diário de bordo na maioria das vezes vai ultrapassar as 4 mil posições....podendo chegar a 15 mil posições....então, vou ter q fazer um loop quebrando estes caracteres...mas, preciso saber de alguma função que manipule o long.

Abraços

Enviado: Qui, 22 Out 2009 8:02 am
por SergioLBJr
Boa sorte.

Quando encontrar a solução posta para todos aí por favor.

Enviado: Qui, 22 Out 2009 9:57 am
por SergioLBJr

Enviado: Qui, 22 Out 2009 2:23 pm
por Pablo
Sérgio...cara, você é meu héroi...heheeh...quando eu crescer quero ser igual a você...bixo, converti o LONG para CLOB.....tipo, fiz um select em uma tabela e deu certo...vou jogar em uma procedure para fazer o que preciso...caso der erro, posto minha dúvida novamente...
mas....muito obrigado pela ajuda e persistência...
um grande abraço

8)

Enviado: Qui, 22 Out 2009 3:36 pm
por SergioLBJr
E o pior de tudo foi te quebrado a cabeça a manha inteira e encontrar a solução no google, uma simples troca de palavra chave me aparece um link aqui do fórum mesmo.

Aliás se com 30 min procurando no google não obtiver bom resultado, pode sentar e esperar um milagre porque não existe reposta pro problema.

Enviado: Qui, 22 Out 2009 3:45 pm
por Pablo
putss grilo....fiquei procurando no google ontem a manhã toda...não achava nada....certamente não estava escolhendo as palavras certas.....ai desisti e fiquei esperando o milagre...hehehe....
mas, ainda bem q existem profissionais como você para ajudar a turma....
obrigado novamente a galera (q ajudaram a enriquecer meus conhecimentos) e a você sérgio, pela persistência....heheh..

falow brother.