2

問題は次のとおりです(下手な英語で申し訳ありません):

私はJDeveloperとOracle10gで作業しており、コードのような別のJSPを呼び出すJavaストアドプロシージャがあります:

int sd = 0;

try {
  CallableStatement clstAddRel = conn.prepareCall(" {call FC_RJS_INCLUIR_RELACAO_PRODCAT(?,?)} ");
  clstAddRel.registerOutParameter(1, Types.INTEGER);
  clstAddRel.setString(1, Integer.toString(id_produto_interno));
  clstAddRel.setString(2, ac[i].toString());
  clstAddRel.execute();

  sd = clstAddRel.getInt(1);
} catch(SQLException e) {
  String sqlTeste3 = "insert into ateste values (SQ_ATESTE.nextval, ?)";

   PreparedStatement pstTeste3 = conn.prepareStatement(sqlTeste3);
   pstTeste3.setString(1,"erro: "+e.getMessage()+ ac[i]);
   pstTeste3.execute();
   pstTeste3.close();
}

この JavaSP は関数ではなくプロシージャであるため、ATESTE というテーブルにエラーを記録しています。内部で DML を操作する必要があります。

だから、私が得ているエラーメッセージは次のとおりです:「パラメータタイプの競合」...

関数「FC_RJS_INCLUIR_RELACAO_PRODCAT」もJavaストアドプロシージャであり、すでにOracleにエクスポートされており、int変数を返します。これを読んで、このJavaSPから呼び出すWebサービスを決定する必要があります。

私はすでに registerOutParameter で OracleType.NUMBER を試しました。

誰が私が間違っているのか知っていますか?

4

1 に答える 1

1

通話にパラメータが不足しているようです。整数出力パラメーターを登録してから、2つの文字列パラメーターを設定します。あなたのプロシージャFC_RJS_INCLUIR_RELACAO_PRODCATは整数値を返すと思います。その場合、コードは次のようになります。

CallableStatement clstAddRel = conn.prepareCall(" { ? = call FC_RJS_INCLUIR_RELACAO_PRODCAT(?,?)} ");
clstAddRel.registerOutParameter(1, Types.INTEGER);
clstAddRel.setString(2, Integer.toString(id_produto_interno));
clstAddRel.setString(3, ac[i].toString());
clstAddRel.execute();
于 2010-04-07T01:23:10.923 に答える