Pular para o conteúdo

Fóruns Banco de dados Oracle LIKE %% EM 400.000 LIKE %% EM 400.000

#75217
ebertfm
Participante

    Graciele, Boa tarde.

    Me perdoe, mas pelo texto n?o deu para entender o que vc est? querendo.

    Se eu entendi o que acho que entendi, vc que procurar um string qualquer dentro de uma concatena??o de valores de uma coluna.

    Ex.: select * from teste where campoa || campob like ‘%a%’;

    Se for simplesmente isso, n?o tem como usar ?ndice mesmo. Vai ter que varrer toda a tabela.

    Mas se n?o for isso, for por exemplo, vc precisa de uma chave ou outro campo:

    Exemplo select * from teste where chave=’a’ and campoa||campob like ‘%a%’;

    Sendo que o campo chave ? a chave da tabela.

    Ent?o ele vai usar o ?ndice. S? de vc ter este tipo de compara??o no where n?o significa que ele n?o vai utilizar um ?ndice.

    Veja um exemplo pr?tico na vers?o 9.2 do Oracle.

    SQL> create table teste (chave number primary key, campoa varchar2(10), campob varchar2(20));

    Table created.

    SQL> analyze table teste estimate statistics;

    Table analyzed.

    SQL> explain plan for
    2 select * from teste where chave = 10 and (campoa||campob like ‘%a%’);

    Explained.

    SQL> @utlxpls

    PLAN_TABLE_OUTPUT


    | Id | Operation | Name | Rows | Bytes | Cost |

    | 0 | SELECT STATEMENT | | 1 | 32 | 1 |
    |* 1 | TABLE ACCESS BY INDEX ROWID| TESTE | 1 | 32 | 1 |

    |* 2 | INDEX UNIQUE SCAN | SYS_C002259 | 1 | | |

    Pelo plano acima vc pode perceber que ele utilizar? o ?ndice de chave prim?ria da tabela.

    Por favor se n?o for isso sua pergunta, mande outro post.

    Espero ter ajudado.

    Abra?os.