Contando caracters

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Pablo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 190
Registrado em: Sex, 27 Out 2006 11:12 am
Localização: 88350000
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
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

não consegue quebrar ela em partes e então aplicar o lenght?
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

vê se ajuda
Pablo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 190
Registrado em: Sex, 27 Out 2006 11:12 am
Localização: 88350000
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
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

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
Pablo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 190
Registrado em: Sex, 27 Out 2006 11:12 am
Localização: 88350000
Pablo

Sérgio, valeu pela ajuda,,,,mas o Long não é aceito no substr, length, instr, etc...

abraços amigo.
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

faz um to_char antes

não pode??
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

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.
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

tenta ver se o pacote UTL_RAW te ajuda..

utl_raw.substr
utl_raw.length
Pablo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 190
Registrado em: Sex, 27 Out 2006 11:12 am
Localização: 88350000
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
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

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;
Pablo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 190
Registrado em: Sex, 27 Out 2006 11:12 am
Localização: 88350000
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.
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Tu já tinha falado isso, mas pelo teu exemplo pensei que estava aceitando.

Como este long é gerado??
Pablo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 190
Registrado em: Sex, 27 Out 2006 11:12 am
Localização: 88350000
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.
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Este teu campo não pode ser varchar2?
Pablo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 190
Registrado em: Sex, 27 Out 2006 11:12 am
Localização: 88350000
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
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Boa sorte.

Quando encontrar a solução posta para todos aí por favor.
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Pablo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 190
Registrado em: Sex, 27 Out 2006 11:12 am
Localização: 88350000
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)
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

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.
Pablo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 190
Registrado em: Sex, 27 Out 2006 11:12 am
Localização: 88350000
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.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 17 visitantes