ORA-00933 SQL 命令没有正确结束但在 SQL Developer 中很好

Ste*_*hRT 4 java oracle jdbc oracle-sqldeveloper oracle12c

我希望有人能找到我的查询有什么问题,因为我看不到它的问题,而且 Oracle SQL Developer 似乎运行与我的 Java Swing 应用程序中的代码相同的查询就好了。

我在 SQL Developer 中的查询:

SELECT 
    ad.ID,ad.Script_Name,ad.Current_Status,
    ad.Issues_found_during_run,ad.Testers,
    ad.Run_Date,ad.Tools,u.fTag,u.role,
    dbms_lob.substr(u.avatar) 
FROM 
    allData ad 
INNER JOIN 
    users u 
ON 
    u.fTag = ad.lastUserWhoUpdated 
GROUP BY 
    ad.ID,ad.Script_Name,ad.Current_Status,
    ad.Issues_found_during_run,ad.Testers,
    ad.Run_Date,ad.Tools,u.fTag,u.role,
    dbms_lob.substr(u.avatar) 
ORDER BY 
    ad.ID ASC;
Run Code Online (Sandbox Code Playgroud)

哪个运行完美并返回我期望的所需记录。

但是,我的 Java Swing 应用程序中的相同查询似乎不喜欢它,因为它给了我以下错误:

java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束。

我的 Java Swing 应用程序代码:

connectToDB();

String query = 
      "SELECT " + 
        "ad.ID," + 
        "ad.Script_Name," + 
        "ad.Current_Status," + 
        "ad.Issues_found_during_run," + 
        "ad.Testers," + 
        "ad.Run_Date," + 
        "ad.Tools," + 
        "u.fTag," + 
        "u.role," + 
        "dbms_lob.substr(u.avatar) " + 
      "FROM " + 
        "allData ad " + 
      "INNER JOIN " + 
        "users u " + 
      "ON " + 
        "u.fTag = ad.lastUserWhoUpdated " +
      "GROUP BY " + 
        "ad.ID," + 
        "ad.Script_Name," + 
        "ad.Current_Status," + 
        "ad.Issues_found_during_run," + 
        "ad.Testers," + 
        "ad.Run_Date," + 
        "ad.Tools," + 
        "u.fTag," + 
        "u.role," + 
        "dbms_lob.substr(u.avatar) " + 
     "ORDER BY " + 
        "ad.ID;";

ResultSet rs = statement.executeQuery(query);            
ResultSetMetaData metaData = rs.getMetaData();
etc..etc..
Run Code Online (Sandbox Code Playgroud)

我对这两个表的结构是:

SCRIPT_NAME                  VARCHAR2(100 BYTE)
CURRENT_STATUS               VARCHAR2(50 BYTE)
ISSUES_FOUND_DURING_RUN      VARCHAR2(150 BYTE)
TESTERS                      VARCHAR2(30 BYTE)
RUN_DATE                     DATE
TOOLS                        VARCHAR2(20 BYTE)
T_SUITE                      NUMBER(38,0)
NOE2                         VARCHAR2(5 BYTE)
NOE3                         VARCHAR2(5 BYTE)
ID                           NUMBER(38,0)
LASTUSERWHOUPDATED           NUMBER
DATELASTMOD                  DATE
Run Code Online (Sandbox Code Playgroud)
FTAG                         NUMBER(38,0)   
ROLE                         VARCHAR2(15 BYTE)
AVATAR                       CLOB
Run Code Online (Sandbox Code Playgroud)

那么,我可能会错过什么?

Jai*_*nik 5

去掉ad.ID下面类似后面的分号。你不需要它

"ORDER BY " + 
    "ad.ID";
Run Code Online (Sandbox Code Playgroud)

  • @StealthRT 分号是客户端工具的一部分,而不是 SQL 语言的一部分,它没有语句终止符。 (2认同)