Oracle
 sql >> база данни >  >> RDS >> Oracle

как да използвам regexp_like на Oracle в Hibernate HQL?

Всъщност не можете да сравните резултата от REGEXP_LIKE с нищо друго освен с условни изрази в PL/SQL.

Hibernate изглежда не приема персонализирана функция без returnType, тъй като винаги трябва да сравнявате изхода с нещо, т.е.:

REGEXP_LIKE('bananas', 'a', 'i') = 1

Тъй като Oracle не ви позволява да сравнявате резултата на тази функция с нищо, измислих решение, използвайки условие за регистър:

public class Oracle10gExtendedDialect extends Oracle10gDialect {

    public Oracle10gExtendedDialect() {
        super();
        registerFunction(
          "regexp_like", new SQLFunctionTemplate(StandardBasicTypes.BOOLEAN,
          "(case when (regexp_like(?1, ?2, ?3)) then 1 else 0 end)")
        );
    }

}

И вашият HQL трябва да изглежда така:

REGEXP_LIKE('bananas', 'a', 'i') = 1

Ще работи :)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разделете varchar на отделни колони в Oracle

  2. Как да премахнете водещите нули от стойностите за ден и месец в Oracle, когато анализирате до низ с помощта на функцията to_char?

  3. Oracle NLS_DATE_FORMAT не работи правилно

  4. Намерете стойности, които не съществуват в таблица

  5. NLS_INITCAP() Функция в Oracle