sql >> Database teknologi >  >> RDS >> Oracle

hvordan man bruger Oracles regexp_like i Hibernate HQL?

Faktisk kan du ikke sammenligne resultatet af REGEXP_LIKE med noget, undtagen i betingede udsagn i PL/SQL.

Hibernate lader til ikke at acceptere en brugerdefineret funktion uden en returnType, da du altid skal sammenligne outputtet med noget, dvs.:

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

Da Oracle ikke tillader dig at sammenligne denne funktions resultat med ingenting, kom jeg med en løsning ved hjælp af 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)")
        );
    }

}

Og din HQL skulle se sådan ud:

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

Det vil virke :)



  1. Er der nogen listedatatype i MySQL-lagrede procedurer, eller en måde at efterligne dem?

  2. Hvordan bruger jeg Postgresql ANY-operatoren i en NOT IN-sætning

  3. MySQL-installation:FEJL:Kunne ikke bygge gem native-udvidelse

  4. Krænkelse af kardinalitet ved brug af en underforespørgsel, der returnerer to værdier