Недопустимый столбец исключения SQL, инструкция java sql

У меня проблема при выполнении следующего оператора 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;
}

Совет сегодня: переключитесь на современный, явный синтаксис JOIN. Легче писать (без ошибок), легче читать (и поддерживать) и при необходимости проще преобразовать во внешнее соединение.

jarlh 12.04.2018 15:09

@a_horse_with_no_name буду обновлять

Logan Wlv 12.04.2018 15:11

Можем ли мы увидеть вашу таблицу 1 и 2?

TheBakker 12.04.2018 15:21

@TheBakker да, я обновлю его

Logan Wlv 12.04.2018 15:22

Предполагая, что он работает в SQL Developer, он может испытывать трудности с термином «МЕСЯЦ». Попробуйте заключить это в кавычки, например t1. "МЕСЯЦ"

Connor McDonald 13.04.2018 03:40
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
183
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я предполагаю, что это происходит потому, что имя столбца в вашем результате будет: MIN(SUBSTR(T1.MONTH,1,4))||'A'||'B'||'CDEFGR'||''||'AT'

Пытаться:

SELECT MIN( ... ) AS mycolumn
Ответ принят как подходящий

Виноват. Все работает хорошо, это была ошибка, когда я использовал неправильные имена переменных.

Другие вопросы по теме