Синтаксическая ошибка DB2 "DAYOFWEEK_ISO" при работе H2 (в режиме DB2) - PullRequest
0 голосов
/ 28 января 2019

У меня есть следующий запрос, который хорошо работает при работе непосредственно с 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.

1 Ответ

0 голосов
/ 28 января 2019

Если вы спрашиваете, почему вы получаете эту ошибку, это потому, что вы используете специфическую для DB2 функцию DAYOFWEEK_ISO, которая не существует для базы данных H2.

Если вы спрашиваете, как решить эту проблемуошибка, вы не можете, пока вы используете специфичные для базы данных запросы (в вашем случае для DB2) к другому типу базы данных.Если у вас есть hibernate в вашем приложении, вы можете вместо этого использовать HQL, чтобы ваши запросы были общими (обычно) и работали с различными типами баз данных (обычно).Если нет, или если вам нужно сохранить этот конкретный запрос, вы можете проверить тип среды и использовать фиктивные данные для тестирования, а не пытаться работать с вашей базой данных.

...