Java HSQLDB ORACLE用户缺少权限或找不到对象:类似REGEXP_

Java HSQLDB ORACLE用户缺少权限或找不到对象:类似REGEXP_,java,oracle11g,hsqldb,Java,Oracle11g,Hsqldb,我对hsqldb测试有点问题 我使用Oracle11g作为项目的数据源,使用hsqldb-2.3.2.jar进行测试 在一个查询中,我使用了这个regexp和regexp_LIKE(code_SC,'*PL[0-9]\u J5[1-9]$) 我无法用hsqldb进行测试,我已将数据源配置为: <bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

我对hsqldb测试有点问题

我使用Oracle11g作为项目的数据源,使用hsqldb-2.3.2.jar进行测试

在一个查询中,我使用了这个regexp
和regexp_LIKE(code_SC,'*PL[0-9]\u J5[1-9]$)

我无法用hsqldb进行测试,我已将数据源配置为:

<bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.hsqldb.jdbcDriver" />
    <property name="url" value="jdbc:hsqldb:mem:castor;sql.syntax_ora=true" />
    <property name="username" value="sa" />
    <property name="password" value="" />
</bean>
但我得到了这个错误:

用户缺少权限或找不到对象:REGEXP\u LIKE

我忘了申报什么东西了吗


非常感谢。

您在自定义函数的定义中使用了原始函数
REGEXP\u LIKE
。因此,当HSQLDB尝试创建它时,它失败了,因为它正在寻找一个具有此名称的内置函数来将实现委托给它

HSQLDB的内置函数
REGEXP_MATCHES
似乎与Oracle的
REGEXP_类似
对应,因此这应该可以工作:

@Override
protected void registerFunctions() {
  registerFunction(
    "regexp_like",
    new SQLFunctionTemplate(Hibernate.BOOLEAN, "regexp_matches(?1,?2)")
  );
}
 public class HsqlOracleDialect extends Oracle10gDialect {

    public HsqlOracleDialect() {
        super();
    }

    @Override
    protected void registerFunctions() {
            registerFunction("regexp_like", new SQLFunctionTemplate(Hibernate.BOOLEAN,
     "case when (regexp_like(?1,?2)) then 1 else 0 end)"));
    }
}
@Override
protected void registerFunctions() {
  registerFunction(
    "regexp_like",
    new SQLFunctionTemplate(Hibernate.BOOLEAN, "regexp_matches(?1,?2)")
  );
}