繁体   English   中英

HSQL中的Oracle的empty_clob()

[英]Oracle's empty_clob() in HSQL

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

尝试将empty_clob()函数写为返回空VARCHAR字符串,而不是返回CLOB。

只是添加到BTW的答案中,如果要创建JDBC脚本并创建模式,则必须添加

create function empty_clob() 
returns VARCHAR (20)
return ''; 

在你添加之前

CREATE SCHEMA schema_name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM