Во втором запросе вы соответствуете от [
до ]
.Конечно, это не сработает.Исправьте это:
SELECT 'VALID' FROM DUAL WHERE REGEXP_LIKE (']', '^([]]*)$');
ОБНОВЛЕНИЕ : Если вы просто хотите проверить, что определенные символы не находятся в строке, вам нужно вместо этого REGEXP_INSTR
.Если эта функция возвращает число> 0, это означает, что символ находится в строке.Вы можете попробовать это:
SELECT REGEXP_INSTR ('[ABC]', '\[|\]|[!%^&*{}]') FROM DUAL;