sql >> Databáze >  >> RDS >> Oracle

jak používat regexp_like Oracle v Hibernate HQL?

Ve skutečnosti nemůžete srovnávat výsledek REGEXP_LIKE s ničím jiným než s podmíněnými příkazy v PL/SQL.

Zdá se, že Hibernate nepřijímá vlastní funkci bez returnType, protože vždy potřebujete výstup s něčím porovnat, např.:

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

Protože vám Oracle neumožňuje porovnávat výsledek této funkce s ničím, přišel jsem s řešením pomocí podmínky případu:

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

}

A váš HQL by měl vypadat takto:

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

Bude to fungovat :)



  1. InnoDB:nalezeny duplicitní indexy – je to velmi špatné?

  2. Replikace MySQL s ProxySQL na serverech WHM/cPanel:Část druhá

  3. Úloha pro mysqld.service se v Centos 7 nezdařila

  4. Spusťte SCRIPT z PL/SQL Block