› Fóruns › Banco de dados Oracle › LIKE %% EM 400.000 › LIKE %% EM 400.000
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.