我使用HSQL作为内存数据库来“模拟”用于测试目的Oracle生成的数据库。
我遇到了HSQL和Oracle之间的一个兼容性问题。也就是说,它抱怨缺少EMPTY_CLOB()。
有没有办法向HSQL的上下文提供Oracle的empty_clob()函数?
我试过,例如声明
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 '';
答案 0 :(得分:2)
尝试将empty_clob()函数写为返回空VARCHAR字符串,而不是返回CLOB。
答案 1 :(得分:1)
只是为了补充答案,哪个适用于BTW,如果你要创建一个JDBC脚本并创建一个模式,那么你必须添加
create function empty_clob()
returns VARCHAR (20)
return '';
之后添加
CREATE SCHEMA schema_name