【问题标题】:HSQLDB ORACLE user lacks privilege or object not found: REGEXP_LIKEHSQLDB ORACLE 用户缺少权限或找不到对象:REGEXP_LIKE
【发布时间】:2014-11-19 01:59:59
【问题描述】:

我的 hsqldb 测试有点问题。

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

在一个查询中,我使用了这个正则表达式AND REGEXP_LIKE(CODE_SC, '*PL[0-9]_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>

和带有

的 sessionFactory
<prop key="hibernate.dialect">fr.edf.mpv2.castor.persistance.HsqlOracleDialect</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.hbm2ddl.auto">create</prop>
<prop key="hibernate.hbm2ddl.import_files">import.sql</prop>

我在 import.sql 中添加了我需要的所有内容,它工作正常。

我已经创建了一个类:

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

但我收到此错误:

user lacks privilege or object not found: REGEXP_LIKE

我是不是忘了申报什么?

非常感谢。

【问题讨论】:

    标签: java oracle11g hsqldb


    【解决方案1】:

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

    HSQLDB 的内置函数 REGEXP_MATCHES 似乎是 Oracle 的 REGEXP_LIKE 对应函数,所以这应该可以工作:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-31
      • 1970-01-01
      • 1970-01-01
      • 2015-07-06
      • 1970-01-01
      • 1970-01-01
      • 2019-04-02
      相关资源
      最近更新 更多