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は、Oracle の SQL の一部でも PL/SQL の一部でもない SQLplus ステートメントです。そのため、使用している環境 (Java クライアント、OJDBC、Oracle サーバー) では使用できません。

EXECUTEVARIABLE、についても同様です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 に答える