SQL异常列无效,java sql语句

Posted

技术标签:

【中文标题】SQL异常列无效,java sql语句【英文标题】:SQL exception column invalid, java sql statement 【发布时间】:2018-04-12 13:06:32 【问题描述】:

在 ORACLE 数据库上使用 JAVA 执行以下 SQL 语句时遇到问题,它适用于 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'

java 进程中的 SQL 错误:

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进程,只有reader和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 语法。更容易编写(没有错误),更容易阅读(和维护),并且在需要时更容易转换为外连接。 @a_horse_with_no_name 我会更新它 我们可以看看你的表 1 和 2 吗? @TheBakker 是的,我会更新它 假设它在 SQL Developer 中工作,它可能会在“MONTH”这个词上苦苦挣扎。尝试将其放在引号中,即 t1."MONTH" 【参考方案1】:

我猜这是因为结果中列的名称将是:MIN(SUBSTR(T1.MONTH,1,4))||'A'||'B'||'CDEFGR'||''||'AT'

试试:

SELECT MIN( ... ) AS mycolumn

【讨论】:

【参考方案2】:

我的错。 一切正常,这是我使用错误的变量名称的错误。

【讨论】:

以上是关于SQL异常列无效,java sql语句的主要内容,如果未能解决你的问题,请参考以下文章

ORA-06550:第 1 行,第 7 列:\nPLS-00905:对象 TEST.CMPPROJECTPROC 无效\nORA-06550:第 1 行,第 7 列:\nPL/SQL:语句被忽略&qu

sql2008提示“列名无效”,但是能正常查询

java.sql.SQLSyntaxErrorException-ORA-01722:无效数字 - 准备好的语句

SQLSyntaxErrorException: ORA-00900: 使用 Java 的无效 SQL 语句

SQL修改列名,说列名无效

java.sql.SQLException: ORA-00911: 无效字符