У меня проблема при выполнении следующего оператора SQL с использованием JAVA в базе данных ORACLE, он работает с DBeaver / SQLdeveloper, но во время процесса java я получаю следующую ошибку. Любые идеи ?
Заявление SQL:
SELECT MIN(SUBSTR(t1.MONTH,1,4)) || 'A' || 'B' || 'CDE FGR' || ' ' || 'AT'
FROM table1 t1, table2 t2
WHERE t1.toto=t2.toto
AND t1.tata=t2.tata
AND t1.titi=t2.titi
AND t2.tutu = 'IMPACT_EUROPE_FLAG'
Ошибка SQL во время процесса Java:
org.springframework.jdbc.BadSqlGrammarException: Attempt to process next row failed; bad SQL grammar
nested exception is java.sql.SQLException: Invalid column name
Таблицы:
TABLE1 TABLE2
--------------
MONTH TOTO
TOTO TATA
TATA TITI
TITI TUTU
TUTU
Мой java-процесс, только читатель и stepbuilder:
private Step insertBaseToFile() {
return stepBuilderFactory.get("insertBaseToFile").<GenericRecord, GenericRecord>chunk(100).reader(baseReader())
.writer(fileWriter()).build();
}
private JdbcCursorItemReader<GenericRecord> baseReader() {
JdbcCursorItemReader<GenericRecord> databaseReader = new JdbcCursorItemReader<>();
String sql = null;
sql = " SELECT MIN(SUBSTR(t1.MONTH,1,4)) || 'A' || 'B' || 'CDE FGR' || ' ' || 'AT' " +
"FROM table1 t1, table2 t2 " +
"WHERE t1.toto=t2.toto " +
"AND t1.tata=t2.tata " +
"AND t1.titi=t2.titi " +
"AND t2.tutu = 'IMPACT_EUROPE_FLAG'"
databaseReader.setDataSource(dataSource); //dataSource object from my class using JSON conf to get logs in to DB
databaseReader.setSql(sql);
return databaseReader;
}
@a_horse_with_no_name буду обновлять
Можем ли мы увидеть вашу таблицу 1 и 2?
@TheBakker да, я обновлю его
Предполагая, что он работает в SQL Developer, он может испытывать трудности с термином «МЕСЯЦ». Попробуйте заключить это в кавычки, например t1. "МЕСЯЦ"




Я предполагаю, что это происходит потому, что имя столбца в вашем результате будет: MIN(SUBSTR(T1.MONTH,1,4))||'A'||'B'||'CDEFGR'||''||'AT'
Пытаться:
SELECT MIN( ... ) AS mycolumn
Виноват. Все работает хорошо, это была ошибка, когда я использовал неправильные имена переменных.
Совет сегодня: переключитесь на современный, явный синтаксис
JOIN. Легче писать (без ошибок), легче читать (и поддерживать) и при необходимости проще преобразовать во внешнее соединение.