我有以下查询,当直接针对DB2运行时,它运行良好:
SELECT
RTRIM(CHAR(YR_I)) || RTRIM(CHAR(CASE WHEN MO_I = 1 THEN 1 WHEN MO_I = 2 THEN 1 WHEN MO_I = 3 THEN 1 WHEN MO_I = 4 THEN 1 WHEN MO_I = 5 THEN 1 WHEN MO_I = 6 THEN 1 ELSE 2 END)) || RTRIM(CHAR(QTR_I)) || (case when MO_I < 10 then rtrim(char(0)) || rtrim(char(MO_I)) else rtrim(char(MO_I)) end) || (case when WK_I < 10 then rtrim(char(0)) || rtrim(char(WK_I)) else rtrim(char(WK_I)) end)
AS ACCT_DATE_PER_I
FROM DB2.FCST_DATE
WHERE ACCT_D = (current_date - DAYOFWEEK_ISO(current_date) DAYS - 7 DAYS) with ur
但是当我通过具有以下配置的H2作为数据库运行测试时,
driverclassname: org.h2.Driver
url: jdbc:h2:mem:testdb;mode=DB2
username: test
password:
我收到以下错误消息:
org.springframework.jdbc.UncategorizedSQLException: StatementCallback; uncategorized SQLException for SQL
Caused by: org.h2.jdbc.JdbcSQLException: Function "DAYOFWEEK_ISO" not found; SQL statement: <SQL STATEMENT>
at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) ~[h2-1.4.197.jar:1.4.197]
at org.h2.message.DbException.get(DbException.java:179) ~[h2-1.4.197.jar:1.4.197]
at org.h2.message.DbException.get(DbException.java:155) ~[h2-1.4.197.jar:1.4.197]
at org.h2.command.Parser.readJavaFunction(Parser.java:2699) ~[h2-1.4.197.jar:1.4.197]
at org.h2.command.Parser.readFunction(Parser.java:2756) ~[h2-1.4.197.jar:1.4.197]
at org.h2.command.Parser.readTerm(Parser.java:3102) ~[h2-1.4.197.jar:1.4.197]
at org.h2.command.Parser.readFactor(Parser.java:2587) ~[h2-1.4.197.jar:1.4.197]
at org.h2.command.Parser.readSum(Parser.java:2579) ~[h2-1.4.197.jar:1.4.197]
at org.h2.command.Parser.readConcat(Parser.java:2544) ~[h2-1.4.197.jar:1.4.197]
at org.h2.command.Parser.readCondition(Parser.java:2370) ~[h2-1.4.197.jar:1.4.197]
at org.h2.command.Parser.readAnd(Parser.java:2342) ~[h2-1.4.197.jar:1.4.197]
at org.h2.command.Parser.readExpression(Parser.java:2334) ~[h2-1.4.197.jar:1.4.197]
at org.h2.command.Parser.readTerm(Parser.java:3252) ~[h2-1.4.197.jar:1.4.197]
at org.h2.command.Parser.readFactor(Parser.java:2587) ~[h2-1.4.197.jar:1.4.197]
at org.h2.command.Parser.readSum(Parser.java:2574) ~[h2-1.4.197.jar:1.4.197]
at org.h2.command.Parser.readConcat(Parser.java:2544) ~[h2-1.4.197.jar:1.4.197]
at org.h2.command.Parser.readCondition(Parser.java:2499) ~[h2-1.4.197.jar:1.4.197]
at org.h2.command.Parser.readAnd(Parser.java:2342) ~[h2-1.4.197.jar:1.4.197]
at org.h2.command.Parser.readExpression(Parser.java:2334) ~[h2-1.4.197.jar:1.4.197]
at org.h2.command.Parser.parseSelectSimple(Parser.java:2291) ~[h2-1.4.197.jar:1.4.197]
at org.h2.command.Parser.parseSelectSub(Parser.java:2133) ~[h2-1.4.197.jar:1.4.197]
at org.h2.command.Parser.parseSelectUnion(Parser.java:1946) ~[h2-1.4.197.jar:1.4.197]
at org.h2.command.Parser.parseSelect(Parser.java:1919) ~[h2-1.4.197.jar:1.4.197]
at org.h2.command.Parser.parsePrepared(Parser.java:463) ~[h2-1.4.197.jar:1.4.197]
at org.h2.command.Parser.parse(Parser.java:335) ~[h2-1.4.197.jar:1.4.197]
at org.h2.command.Parser.parse(Parser.java:307) ~[h2-1.4.197.jar:1.4.197]
at org.h2.command.Parser.prepareCommand(Parser.java:278) ~[h2-1.4.197.jar:1.4.197]
at org.h2.engine.Session.prepareLocal(Session.java:611) ~[h2-1.4.197.jar:1.4.197]
at org.h2.engine.Session.prepareCommand(Session.java:549) ~[h2-1.4.197.jar:1.4.197]
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1247) ~[h2-1.4.197.jar:1.4.197]
at org.h2.jdbc.JdbcStatement.executeQuery(JdbcStatement.java:78) ~[h2-1.4.197.jar:1.4.197]
at org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208) ~[commons-dbcp-1.4.jar:1.4]
at org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208) ~[commons-dbcp-1.4.jar:1.4]
at org.springframework.jdbc.core.JdbcTemplate$1QueryStatementCallback.doInStatement(JdbcTemplate.java:433) ~[spring-jdbc-5.0.9.RELEASE.jar:5.0.9.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:376) ~[spring-jdbc-5.0.9.RELEASE.jar:5.0.9.RELEASE]
... 72 common frames omitted
编辑*我的问题是我该如何解决。但是,通过研究,我发现我无法协调H2中某些数据库特定的功能。
答案 0 :(得分:0)
如果您问为什么会收到此错误,那是因为您正在使用特定于DB2的函数DAYOFWEEK_ISO
,而该函数对于H2数据库不存在。
如果您询问如何解决此错误,则只能在针对不同数据库类型的数据库特定查询(对于DB2)中使用特定于数据库的查询。如果您的应用程序处于休眠状态,则可以改用HQL,这样您的查询将是通用的(通常)并针对不同的数据库类型(通常)工作。如果不是这样,或者需要保留此特定查询,则可以检查环境类型并使用模拟数据进行测试,而不必尝试使用数据库。