1

Eclipse SDK 3.2.0 JAVA 到 Oracle 11g 存储过程。我正在尝试调用存储过程并返回输出。

我的代码如下。

我收到的错误消息是ORA-00922: missing or invalid option

Java代码片段:

ResultSet rs2 = st.executeQuery("set serveroutput on size unlimited VARIABLE VAR_CV_1 REFCURSOR; execute SP_FAM_VOLWEEKLY(CV_1=> :VAR_CV_1,p_report_type=>0,p_type => 2,p_num_week =>5,P_GROUPBY_GROUP =>1,p_groupby_cpty  =>0,p_groupby_desk =>0,p_groupby_ccy =>1,p_groupby_t_tz =>1,P_GROUPBY_U_LOCALE=>1);PRINT VAR_CV_1;");

while (rs2.next()) {       
    if (rs != null && rs2.next()) {
        System.out.println(rs2.getString("CCY"));
    }
}
4

1 回答 1

2

set serveroutput是一个 SQLplus 语句,它既不是 Oracle 的 SQL 的一部分,也不是 PL/SQL 的一部分。所以它在您使用的环境(Java 客户端、OJDBC、Oracle 服务器)中不可用。

EXECUTE, VARIABLE,的情况也是如此PRINT

此外,除非使用 BEGIN/END 块从 SQL 切换到 PL/SQL,否则不能一次执行多个语句。

更新:

您可能正在寻找这样的代码:

String query = "begin SP_FAM_VOLWEEKLY(CV_1 => ?, p_report_type=> 0, p_type => 2, p_num_week => 5, P_GROUPBY_GROUP => 1, p_groupby_cpty  => 0, p_groupby_desk => 0,  p_groupby_ccy => 1, p_groupby_t_tz => 1, P_GROUPBY_U_LOCALE => 1); end;";

CallableStatement stmt = conn.prepareCall(query);

// register the type of the out param
stmt.registerOutParameter(1, OracleTypes.CURSOR);

stmt.execute();
ResultSet rs = (ResultSet) stmt.getObject(1);


while (rs.next()) {
    System.out.println(rs.getString("CCY"))
}
于 2012-12-20T15:21:53.487 回答