更改序列 H2DB 的数据类型

Change datatype of a sequence H2DB

我需要更改存储在 H2DB 中的序列的 returned 值,当我通过直接 SQL 查询 H2 return 调用 nextVal 时,我需要一个 BigInt BigDecimal.

我无法转换或转换此值,我需要 H2 returning BigDecimal。

我该怎么做?

编辑:我无法更改 Java 代码,因为我正在测试,所以无法转换或转换来自数据库的请求值。

如果允许替换 H2 jar 文件,您可以创建自己的 H2 补丁版本。

org.h2.expression.Function变化

    addFunctionNotDeterministic("NEXTVAL", NEXTVAL,
            VAR_ARGS, Value.LONG); 

    addFunctionNotDeterministic("NEXTVAL", NEXTVAL,
            VAR_ARGS, Value.DECIMAL);

并在 org.h2.expression.SequenceValue 中更改

@Override
public Value getValue(Session session) {
    long value = sequence.getNext(session);
    session.setLastIdentity(ValueLong.get(value));
    return ValueLong.get(value);
}

@Override
public int getType() {
    return Value.LONG;
} 

@Override
public Value getValue(Session session) {
    long lv = sequence.getNext(session);
    ValueDecimal value = ValueDecimal.get(BigDecimal.valueOf(lv)); 
    session.setLastIdentity(value);
    return value;
}

@Override
public int getType() {
    return Value.DECIMAL;
} 

我尝试从 wero 的回答中获取代码并将其作为 H2 本身的一个功能。

这个 GitHub 分支:在 H2 中使用 'MODE=Oracle' 时,https://github.com/portofrotterdam/h2database returns BigDecimals 而不是 BigInteger/longs,使其与 Oracle 数据库更加兼容。

我已经向 master 请求拉取,所以也许这种行为将在 h2database 中可用。