Я использую HSQL как базу данных в памяти для «макета» для целей тестирования. База данных Oracle, используемая для производства.Oracle_pic_bob() в HSQL
Я столкнулся с одной проблемой совместимости между HSQL и Oracle. А именно, он жалуется, что EMPTY_CLOB() отсутствует.
Есть ли способ предоставить функцию empty_clob() Oracle в контексте HSQL?
Я пробовал, например. объявляя
CREATE FUNCTION empty_clob()
RETURNS CLOB
NO SQL
LANGUAGE JAVA PARAMETER STYLE JAVA
EXTERNAL NAME 'CLASSPATH:com.example.HsqlUtil.emptyClob'
и реализации этой функции в Java коде
package com.example;
public class HsqlUtil {
public static java.sql.Clob emptyClob() throws SQLException {
return oracle.sql.CLOB.getEmptyCLOB();
// return new org.hsqldb.jdbc.JDBCClob(""); also does not work
}
}
, но это приводит к
Caused by: org.hsqldb.HsqlException: Java execution: EMPTY_CLOB
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.Routine.invokeJavaMethod(Unknown Source)
at org.hsqldb.Routine.invoke(Unknown Source)
at org.hsqldb.FunctionSQLInvoked.getValueInternal(Unknown Source)
at org.hsqldb.FunctionSQLInvoked.getValue(Unknown Source)
at org.hsqldb.StatementDML.getInsertData(Unknown Source)
at org.hsqldb.StatementInsert.getResult(Unknown Source)
at org.hsqldb.StatementDMQL.execute(Unknown Source)
at org.hsqldb.Session.executeCompiledStatement(Unknown Source)
at org.hsqldb.Session.execute(Unknown Source)
... 25 more
Caused by: org.hsqldb.HsqlException: incompatible data type in conversion
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.types.ClobType.convertJavaToSQL(Unknown Source)
Решение:
По предложению fredt, является обеспечение SQL как показано ниже:
create function empty_clob()
returns VARCHAR (20)
return '';
почему не просто используйте [XE] (http://www.oracle.com/technetwork/products/express-edition/overview/index.html)? – tbone
Вам не нужно 'empty_clob()' ни в Oracle, ни в HSQLDB –
@a_horse_with_no_name Я использую функцию empty_clob() в моем производственном коде. Я хочу запускать тесты на этот код, но используя HSQLDB в памяти вместо Oracle DB. – Michal