Я пытаюсь запустить приведенный ниже код, используя H2DB (через тест junit), при этом я получаю сообщение об ошибке, как показано ниже. Я понимаю, что в H2 нет функции, доступной как "days". Поэтому я пытаюсь написать пользовательскую функцию, но она не работает, может ли кто-нибудь помочь в написании этой функции.
Код класса SQLBuilder:
public String dummy() {
return new StringBuilder(new SQL() {
{
SELECT("date(CREATE_TMS)");
SELECT("CASE WHEN date(CREATE_TMS) >= (CURRENT DATE - cast('1' AS integer) days) THEN 'Y' ELSE 'N' END NEW_B");
FROM("Q.DUMMY");
}
}.toString().concat(" FOR READ ONLY WITH UR")).toString();
}
Сообщение об ошибке:
org.springframework.jdbc.BadSqlGrammarException:
### Error querying database. Cause: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "SELECT DATE(CREATE_TMS), CASE WHEN DATE(CREATE_TMS) >= (CURRENT DATE - CAST('1' AS INTEGER) DAYS[*]) THEN 'Y' ELSE 'N' END NEW_BILLING
FROM Q.DUMMY FOR READ ONLY WITH UR "; expected "[, ::, *, /, %, +, -, ||, ~, !~, NOT, LIKE, ILIKE, REGEXP, IS, IN, BETWEEN, AND, OR, ,, )"; SQL statement:
SELECT date(CREATE_TMS), CASE WHEN date(CREATE_TMS) >= (CURRENT DATE - cast('1' AS integer) days) THEN 'Y' ELSE 'N' END NEW_BILLING
FROM Q.DUMMY FOR READ ONLY WITH UR [42001-199]
По какой-то причине дней конвертируются в ДНЕЙ [*] , мы видим это в сообщении об ошибке.
Метод клиента, который я пробовал в schema-db2. sql:
drop ALIAS if exists days;
CREATE ALIAS days as '
import java.lang.String;
@CODE
java.lang.String days() throws Exception {
return "days";
}
';
applicationaiton.properties:
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false;Mode=DB2