sql >> Database >  >> RDS >> Oracle

hoe regexp_like van Oracle te gebruiken in Hibernate HQL?

Eigenlijk kun je het resultaat van REGEXP_LIKE met niets vergelijken, behalve in voorwaardelijke instructies in PL/SQL.

Hibernate lijkt geen aangepaste functie te accepteren zonder een returnType, omdat je de uitvoer altijd met iets moet vergelijken, namelijk:

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

Omdat Oracle je niet toestaat om het resultaat van deze functie met niets te vergelijken, heb ik een oplossing bedacht met behulp van case condition:

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)")
        );
    }

}

En je HQL zou er zo uit moeten zien:

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

Het zal werken :)



  1. Hoe verander ik een MySQL-tabel in UTF-8?

  2. MySQL selecteer en bereken waarde uit meerdere kolommen

  3. Hoe wachtwoord versleutelen in Oracle?

  4. Gebruik OBJECTPROPERTY() om te bepalen of een object een weergave is in SQL Server