Modifique seu
WHERE condição assim:WHERE mycolumn LIKE '%\_%' ESCAPE '\'
Essa é uma das maneiras pelas quais o Oracle oferece suporte a caracteres de escape. Aqui você define o caractere de escape com o
escape palavra-chave. Para obter detalhes, consulte este link no Oracle Docs. O
'_' e '%' são curingas em um LIKE instrução operada em SQL. O
_ caractere procura a presença de (qualquer) um único caractere. Se você pesquisar por columnName LIKE '_abc' , ele fornecerá um resultado com linhas com 'aabc' , 'xabc' , '1abc' , '#abc' mas NÃO 'abc' , 'abcc' , 'xabcd' e assim por diante. O
'%' caractere é usado para corresponder a 0 ou mais números de caracteres. Isso significa que, se você pesquisar por columnName LIKE '%abc' , ele lhe dará um resultado com 'abc' , 'aabc' , 'xyzabc' e assim por diante, mas não 'xyzabcd' , 'xabcdd' e qualquer outra string que não termine com 'abc' . No seu caso, você pesquisou por
'%_%' . Isso fornecerá todas as linhas com essa coluna com um ou mais caracteres, ou seja, qualquer caractere, como valor. É por isso que você está obtendo todas as linhas, mesmo que não haja _ nos valores de sua coluna.