gpt4 book ai didi

oracle - HSQLDB - Oracle to_char(整数)抛出 "Unexpected Token : )"

转载 作者:行者123 更新时间:2023-12-02 04:08:43 31 4
gpt4 key购买 nike

我正在 Hsqldb 中进行集成测试。我的生产数据库是 Oracle 数据库。


版本

  • hibernate :4.1.3.final。

  • Hsqldb:2.3.3。 (我无法使用 2.3.4,因为它无法一键运行所有 junit 测试。)


我的问题

为了创建我的测试数据库,我遵循了 tutorial稍加修改。除了使用 Oracle 中的 TO_CHAR(integer) 函数的方法之外,一切正常。对于这些方法,我得到了一个意外的标记:)

这是导致异常的代码

select ="select p.name, to_char(p.id) "
+ " from t_player p " +
"inner join t_job job on j.id=p.id_job ";

这是我的单元测试的一部分

public void testFindPlayer() throws ClassNotFoundException, SQLException {

Class.forName("org.hsqldb.jdbcDriver");
Connection connection = DriverManager.getConnection("jdbc:hsqldb:mem:DB", "sa", "");
String syntax_ora = "SET DATABASE SQL SYNTAX ORA TRUE";
PreparedStatement ps_ora = connection.prepareStatement(syntax_ora);
ps_ora.execute();
ps_ora.close();
connection.close();

List<String[]> actual_player = Player.findPlayer("Name");
List<String[]> expected_player = new ArrayList<String[]>();
//etc..

这是异常(exception)

Caused by: org.hsqldb.HsqlException: unexpected token: )
at org.hsqldb.error.Error.parseError(Unknown Source)
at org.hsqldb.ParserBase.unexpectedToken(Unknown Source)
at org.hsqldb.ParserDQL.readExpression(Unknown Source)
at org.hsqldb.ParserDQL.readSQLFunction(Unknown Source)
at org.hsqldb.ParserDQL.readColumnOrFunctionExpression(Unknown Source)
at org.hsqldb.ParserDQL.XreadSimpleValueExpressionPrimary(Unknown Source)
at org.hsqldb.ParserDQL.XreadAllTypesValueExpressionPrimary(Unknown Source)
at org.hsqldb.ParserDQL.XreadAllTypesPrimary(Unknown Source)
at org.hsqldb.ParserDQL.XreadAllTypesFactor(Unknown Source)
at org.hsqldb.ParserDQL.XreadAllTypesTerm(Unknown Source)
at org.hsqldb.ParserDQL.XreadAllTypesCommonValueExpression(Unknown Source)
at org.hsqldb.ParserDQL.XreadValueExpression(Unknown Source)
at org.hsqldb.ParserDQL.XreadSelect(Unknown Source)
at org.hsqldb.ParserDQL.XreadQuerySpecification(Unknown Source)
at org.hsqldb.ParserDQL.XreadSimpleTable(Unknown Source)
at org.hsqldb.ParserDQL.XreadQueryPrimary(Unknown Source)
at org.hsqldb.ParserDQL.XreadQueryTerm(Unknown Source)
at org.hsqldb.ParserDQL.XreadQueryExpressionBody(Unknown Source)
at org.hsqldb.ParserDQL.XreadQueryExpression(Unknown Source)
at org.hsqldb.ParserDQL.compileCursorSpecification(Unknown Source)
at org.hsqldb.ParserCommand.compilePart(Unknown Source)
at org.hsqldb.ParserCommand.compileStatement(Unknown Source)
at org.hsqldb.Session.compileStatement(Unknown Source)
at org.hsqldb.StatementManager.compile(Unknown Source)
at org.hsqldb.Session.execute(Unknown Source)
... 41 more

我如何尝试修复它

1) 我尝试了 Oracle 的另一个函数,即 to_char(number,'format')。基本上,我使用以下内容更改选择部分:

select ="select p.name, to_char(p.id,'999999') "
+ " from t_player p " +
"inner join t_job job on j.id=p.id_job ";

但是后来,我得到了这个异常:操作中的数据类型不兼容

2)我将SET DATABASE SQL OSYNTAX部分放入注释中

引发了相同的异常。

您知道如何解决此问题吗?

感谢您的回复。

最佳答案

HSQLDB 的内置 TO_CHAR 函数仅支持日期和时间戳参数。

您可以为数值创建用户定义的 TO_CHAR 函数。例如:

CREATE FUNCTION TO_CHAR(param DECIMAL) RETURNS VARCHAR(20) 
RETURN CAST(param AS VARCHAR(20))

CREATE FUNCTION TO_CHAR(param DECIMAL, format VARCHAR(20)) RETURNS VARCHAR(20)
RETURN CAST(param AS VARCHAR(20))

现在 TO_CHAR(p.id) 将以字符串形式返回 id,并且二元版本也返回相同的值。

关于oracle - HSQLDB - Oracle to_char(整数)抛出 "Unexpected Token : )",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38009777/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com