[英]Select the Oracle java - ORA-00905: not found keyword
我正在嘗試在銀行中進行連接測試並提取一些信息,請認真研究,但是我遇到了以下錯誤:
Exception in thread "main" java.sql.SQLException: ORA-00905:
not found keyword
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:207)
at oracle.jdbc.driver.T4CStatement.executeForDescribe(T4CStatement.java:790)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1039)
at oracle.jdbc.driver.T4CStatement.executeMaybeDescribe(T4CStatement.java:830)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1132)
at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1272)
at Principal.Principal.main(Principal.java:46)
當我使用簡單的select運行代碼時,例如select * from plan;
它完美地工作。
我該如何解決此錯誤代碼,並且有一種更簡單的方法可以在oracle數據庫中執行選擇,或者此代碼就足夠了?
我想運行查詢以顯示島上的所有列值1(ICCID)。
package Principal;
import java.sql.*;
public class Principal {
public static void main(String[] args) throws Exception {
Connection conexao = ObterConexao();
Statement statement = conexao.createStatement();
String query = "SELECT a.rp_package_value AS ICCID, "
+ "c.rrs_resource_value AS IMSI, "
+ " ( "
+ " CASE "
+ " WHEN (SUBSTR (c.rrs_resource_value, 6, 1) = SUBSTR (a.rp_package_value, 9, 1)) "
+ "AND (SUBSTR (c.rrs_resource_value, 6, 2) <> '00') -- valida se o HLR existe "
+ "THEN 'Valid' "
+ "ELSE 'Invalid' "
+ "END ) AS IMSI_CHECK , "
+ "rrs_resource_sts Status, rp_package_sts "
+ "FROM mtaapp20.rm_packages a, "
+ "mtaapp20.rm_package_content b, "
+ "mtaapp20.rm_resource_stock c "
+ "WHERE a.rp_package_value IN "
+ "(SELECT RRS_RESOURCE_VALUE "
+ "FROM mtaapp20.rm_resource_stock c "
+ "WHERE c.rrs_resource_tp_id = 6 "
+ "AND c.rrs_resource_pool = 30 "
+ "--AND a.rp_package_value like '89955053110002178148' "
+ "AND SUBSTR (RRS_RESOURCE_VALUE, 9, 2) like '%1%' "
+ "AND c.rrs_resource_sts = 'ASSIGNED' "
+ ") "
+ "AND a.rp_package_id = b.rpc_package_id "
+ "AND c.rrs_resource_sts = a.rp_package_sts "
+ "AND b.rpc_component_tp_id = 5 "
+ "AND b.rpc_component_vl_id = c.rrs_id "
+ "ORDER BY a.sys_creation_date DESC " ;
ResultSet resultSet = statement.executeQuery(query);
if (resultSet.next()) {
System.out.println(resultSet.getObject(2));
}
}
private static Connection ObterConexao() {
Connection conexao = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conexao = DriverManager.getConnection(
"jdbc:oracle:thin:@BRUX:1521:T00WM11", "user", "password");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conexao;
}
}
您在這一行中有一條SQL注釋:
+ "AND (SUBSTR (c.rrs_resource_value, 6, 2) <> '00') -- valida se o HLR existe "
問題在於Java代碼不知道SQL代碼中的任何換行符,因此會忽略“-”之后的所有內容。 只需將此行更改為:
+ "AND (SUBSTR (c.rrs_resource_value, 6, 2) <> '00') "
正如Volodymyr Pasechnyk指出的那樣 ,問題出在SQL查詢中。
您可以從查詢中刪除注釋,也可以將注釋從--
更改為將注釋的代碼包裝在/*
和*/
。
所以改變:
+ "AND (SUBSTR (c.rrs_resource_value, 6, 2) <> '00') -- valida se o HLR existe "
至
+ "AND (SUBSTR (c.rrs_resource_value, 6, 2) <> '00') /* valida se o HLR existe */ "
並更改:
+ "--AND a.rp_package_value like '89955053110002178148' "
至
+ "/*AND a.rp_package_value like '89955053110002178148'*/ "
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.