multiple into funcion columns 10g sql oracle oracle-text

funcion - pl sql pivot rows into columns



Texto de Oracle que se escapa con llaves y comodines (1)

Qué tal si:

select * from MY_TABLE where CONTAINS(MY_COL, regexp_replace(''*abc*'', ''([^*])'', ''///1'')) > 0

Quiero poder escapar de los criterios de búsqueda en una consulta de texto de Oracle utilizando y combinar los criterios de escape con caracteres comodín para tener el criterio de "doble truncado". (Sé que mis índices pueden no estar configurados para un rendimiento ideal, pero eso es superfluo). Quiero poder usar la sintaxis de llaves para una mejor legibilidad, pero esto no funciona. De acuerdo con la respuesta principal de esta pregunta relacionada (pero no duplicada), las llaves definen los tokens completos. ¿Hay alguna manera de deshabilitar o evitar este comportamiento?

Texto de Oracle: Cómo sanear la entrada del usuario

Preferiría evitar tener que escapar de todos los caracteres en mis criterios de búsqueda (según la última selección en mi código) o intentar buscar caracteres especiales en la cadena, ya que las palabras reservadas también se consideran "especiales". (Tenga en cuenta que no tengo palabras de detención) Lo siguiente demuestra mi problema. (Desafortunadamente, SQLFiddle no parece ser compatible con el texto de Oracle):

create table MY_TABLE(MY_COL varchar2(20)); insert into MY_TABLE(MY_COL) values (''abc''); insert into MY_TABLE(MY_COL) values (''abcd''); insert into MY_TABLE(MY_COL) values (''abcde''); insert into MY_TABLE(MY_COL) values (''bcd''); insert into MY_TABLE(MY_COL) values (''bcde''); create index FTIX on MY_TABLE (MY_COL) indextype is CTXSYS.CONTEXT PARAMETERS (''STOPLIST CTXSYS.EMPTY_STOPLIST SYNC (ON COMMIT)''); select * from MY_TABLE where CONTAINS(MY_COL, ''%bcd%'') > 0; --expected results select * from MY_TABLE where CONTAINS(MY_COL, ''%{bcd}%'') > 0; --no results select * from MY_TABLE where CONTAINS(MY_COL, ''{bcd}'') > 0; --returns bcd select * from MY_TABLE where CONTAINS(MY_COL, ''{%bcd%}'') > 0; --returns bcd select * from MY_TABLE where CONTAINS(MY_COL, ''%/b/c/d%'') > 0; --expected results