oracle 错误:ORA-00923:未在预期位置找到 FROM 关键字 (JDBC)

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/27095713/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-19 02:38:41  来源:igfitidea点击:

Error: ORA-00923: FROM keyword not found where expected (JDBC)

javasqloraclejdbc

提问by James Angelo

i'm new to oracle and java. I'm trying to understand why my code isn't working. Each time when i execute the last bit of code, i get that error. I've been trying to understand why i get it for quite some time, but i can't solve it. There's only one SELECT statement in this code. I think there aren't any mistakes there. Code from WageK.java:

我是 oracle 和 java 的新手。我试图理解为什么我的代码不起作用。每次当我执行最后一点代码时,我都会收到那个错误。我一直试图理解为什么我得到它很长一段时间,但我无法解决它。这段代码中只有一个 SELECT 语句。我认为那里没有任何错误。来自 WageK.java 的代码:

import java.sql.*;

public class wage
{
public static void getWage
(int wage_id, java.lang.String[] w_name, java.lang.String[] w_lname, 
int[] w_wage, int[] w_month, int[] wage_calc)
throws SQLException 
{
try
{
  Connection conn = DriverManager.getConnection("jdbc:default:connection:");
  PreparedStatement pstmt = null;
  ResultSet rs = null;

  String sql = "Select name, last_name, wage, 
  n_month, Value(A).wage_calc() as your_wage" +"From wage_java A" + 
  "Where A.ID = ?";

  pstmt = conn.prepareStatement(sql);
  pstmt.setInt(1, wage_id);
  rs = pstmt.executeQuery();

  if (rs.next()) 
  {
    w_name[0] = rs.getString("name");
    w_lname[0] = rs.getString("last_name");
    w_wage[0] = rs.getInt("wage");
    w_month[0] = rs.getInt("n_month");
    wage_calc[0] = rs.getInt("wage_calc");
  }
  else
  {
    w_name[0] = "0";
    w_lname[0] = "0";
    w_wage[0] = 0;
    w_month[0] = 0;
    wage_calc[0] = 0;       
  }
   }
   catch (SQLException e) {System.err.println(e.getMessage());}
 }
}

Then i was publishing the PL/SQL wrapper using this code.

然后我使用此代码发布 PL/SQL 包装器。

Create or replace procedure getWage (wage_id IN NUMBER, w_name OUT VARCHAR2, 
w_lname OUT VARCHAR2, w_wage OUT NUMBER, w_month OUT NUMBER, 
wage_calc OUT NUMBER) AS language Java name 'WageK.getWage
(int, java.lang.String[],java.lang.String[],int[], int[], int[])';

But when i try to access it using this code, it gives me that error:

但是当我尝试使用此代码访问它时,它给了我这个错误:

set serveroutput ON;
call  DBMS_JAVA.SET_OUTPUT(2000);

declare
  w_name VARCHAR2(20);
  w_lname VARCHAR2(20);
  w_wage Number;
  w_month Number;
  wage_calc Number;

BEGIN
  getWage(1, w_name, w_lname, w_wage, w_month, wage_calc);
  dbms_output.Put_line('Wages of employee's:');
  dbms_output.Put_line('  ' || wage_calc);
end;

Any help regarding my issue would be greatly appreciated.

任何有关我的问题的帮助将不胜感激。

采纳答案by Gordon Linoff

You should print out the string after it is created. At least some of the problems would be obvious, such as:

您应该在创建字符串后将其打印出来。至少有一些问题是显而易见的,例如:

Select name, last_name, wage, 
  n_month, Value(A).wage_calc() as your_wageFrom wage_java AWhere A.ID = ?;

In other words, you need spaces in the string, something like this:

换句话说,字符串中需要空格,如下所示:

String sql = "Select name, last_name, wage, n_month, Value(A).wage_calc() as your_wage " +
             "From wage_java A " + 
             "Where A.ID = ?";