[firebase-br] Procedure Remover Tags HTML - A saga continua...

Christian e Ana Luiza Britto chriseana em gmail.com
Qua Jan 6 19:54:21 -03 2016


Olá Carlos,
MUITO obrigado pela dica!

Faz todo o sentido. Infelizmente, quando fui verificar encontrei na
realidade campos bem grandes. A maioria, como disse, é pequena, mas
cheguei a encontrar um nota com 56.000 caracteres. Com isso não dá
para usar o varchar e o blob fica muito lento...

Vou tentar outras alternativas.
Grande abraço,
Christian

Em 06/01/16, Carlos H. Cantu<listas em warmboot.com.br> escreveu:
> Cada vez que vc manipula uma variável do tipo blob no PSQL (triggers,
> procedures, etc), mesmo que mude apenas um byte nele, uma nova "cópia"
> do blob todo é criada em memória. Acredito que isso não seja muito bom
> em termos de performance ou mesmo de memória consumida.
>
> Por curiosidade, faça um teste trocando blob por varchar, e veja como
> fica a performance. Obviamente, o conteúdo não poderá exceder o limite
> do varchar (32765).
>
> PS: A variável TagFound pode ser tranquilamente um varchar, afinal,
> uma tag nunca será maior que o limite dele.
>
> []s
> Carlos H. Cantu
> www.FireBase.com.br - www.firebirdnews.org
> www.warmboot.com.br - blog.firebase.com.br
>
> CeALB> Olá Colegas,
>
> CeALB> Preciso de uma rotina que retire todos os tags html de um campo,
> CeALB> revomovendo tudo o que estiver dentro dos <> apenas (Os coódigos de
> CeALB> acentuação podem ser ignorados).
>
> CeALB> Seguindo os conselhos do colega Gladiston, poderia tentar uma função
> CeALB> externa. Mas, pretendo rodar o banco em diversas plataformas
> CeALB> (Mac/Win/Linux) o que dificulta o processo, pois precisaria compilar
> a
> CeALB> tunção em diferentes plataformas...
>
> CeALB> Decidi, então, fazer via Stored Procedure. Ficou assim:
>
>
>
> CeALB> CREATE OR ALTER PROCEDURE STRIPALLHTML (
> CeALB>     htmlstring blob sub_type 1 segment size 80)
> CeALB> returns (
> CeALB>     stripedstring blob sub_type 1 segment size 80)
> CeALB> as
> CeALB> declare variable tagbegin integer;
> CeALB> declare variable tagend integer;
> CeALB> declare variable tagfound blob sub_type 1 segment size 80 collate
> unicode_ci_ai;
> CeALB> begin
> CeALB>   TagBegin = position ('<', HTMLString);
>
> CeALB>   while (:TagBegin > 0) do
> CeALB>   begin
> CeALB>     TagEnd = position ('>', HTMLString, TagBegin);
> CeALB>     TagFound = substring (HTMLString FROM TagBegin FOR ((TagEnd -
> CeALB> TagBegin) + 1));
> CeALB>     HTMLString = replace (HTMLString, TagFound, '');
> CeALB>     TagBegin = position ('<', HTMLString);
> CeALB>   end
> CeALB>   StripedString = HTMLString;
> CeALB>   suspend;
> CeALB> end
>
> CeALB> Para chamá-la eu uso o seguinte comando:
>
> CeALB> select items.note, (SELECT stripedString FROM StripAllHTML
> CeALB> (items.note)) from items
>
> CeALB> A procedure retorna exatamente o resultado que eu preciso. O
> problema
> CeALB> é que está LENTA DEMAIS. Rodando em um banco com 400 itens o
> IBExpert
> CeALB> demora quase 2 minutos para dar o retorno... Em média cada campo
> NOTE
> CeALB> possui 2.000 caracteres...
>
> CeALB> Estou fazendo algo errado?
> CeALB> Podem dar uma DICA?
>
> CeALB> Abraços,
> CeALB> Christian
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas:
> http://www.firebase.com.br/pesquisa_lista.html
>




Mais detalhes sobre a lista de discussão lista