2014-09-24 37 views
2

我有一個hsqldb測試的小問題。HSQLDB ORACLE用戶缺少權限或對象未找到:REGEXP_LIKE

我使用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

不我已經忘了申報的東西嗎?

非常感謝。

回答

0

您在自定義函數的定義中使用了原始函數REGEXP_LIKE。所以,當HSQLDB嘗試創建它時,它會失敗,因爲它正在尋找一個內置函數,並使用該名稱將實現委託給它。

HSQLDB的內置功能REGEXP_MATCHES似乎是甲骨文的REGEXP_LIKE對手,所以這應該工作:

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