【问题标题】:ORA-00933: SQL command not properly ended - WHERE clause [duplicate]ORA-00933: SQL 命令未正确结束 - WHERE 子句 [重复]
【发布时间】:2020-09-11 07:51:54
【问题描述】:

我已将以下查询存储在字符串中以请求我的 OracleDB:

"SELECT firstname, lastname, COUNT(kids)  
FROM test_table  
WHERE firstname in ('mario',  'peter')  
GROUP BY firstname, lastname
ORDER BY firstname, lastname;"

当我通过我的 Java 应用程序和 JDBC 执行查询时,我收到以下错误:

Exception in thread "main" java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:447)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:951)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:513)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:227)
    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
    at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:195)
    at oracle.jdbc.driver.T4CStatement.executeForDescribe(T4CStatement.java:876)
    at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1175)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1296)
    at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1498)
    at oracle.jdbc.driver.OracleStatementWrapper.executeQuery(OracleStatementWrapper.java:406)
    at com.foo.test.App.main(App.java:30)

【问题讨论】:

    标签: java oracle jdbc


    【解决方案1】:

    去掉分号,这里:

    ORDER BY firstname, lastname;"
                                ^
                                |
    

    【讨论】:

    • 您能解释一下原因吗?当我使用 SQL Developer 请求我的数据库时,我总是以“;”结束我的查询
    • JDBC 旨在一次执行一条语句。 SQL 中的分号用作语句分隔符。所以分号不是我正在使用的许多数据库(包括 Oracle)的语句语法的一部分。一些 JDBC 驱动程序会自动删除它
    • 因为 - 当您“通过我的 Java 应用程序和 JDBC”执行它时,分号会导致错误。类似于动态 SQL (EXECUTE IMMEDIATE),其中语句不能用分号终止。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多