Oracleデータベースのストアド・プロシージャにいくつか問題があります。JDBCストアド・プロシージャへのコールでNULLが返される
プロシージャ(50個のINパラメータと2個のIN OUTパラメータがあります)を呼び出し、これらの2つのOUTパラメータを取得するだけです。
Session session = (Session) HibernateUtil.currentSession();
final Transaction transaction = session.beginTransaction();
try {
session.doWork(new Work() {
public void execute(Connection connection) throws SQLException {
try {
CallableStatement call = connection.prepareCall("{?,? = call geneva_admin.bksgnvcrmps.createorreturnproduct1nc(" +
"?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?," +
"?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?," +
"?,?,?,?,?,?,?,?,?,?,?,?)}");
int i = 1;
call.registerOutParameter(i++, Types.INTEGER);
call.registerOutParameter(i++, Types.VARCHAR);
call.setString(i++, typeofproduct);
call.setString(i++, shiptositenumber);
call.setString(i++, billtositenumber);
call.setString(i++, ordernumber);
call.setInt(i++, orderid);
...
call.setInt(i++, errcode);
call.setString(i++, errmsg);
call.execute();
System.out.println("err_code: " + call.getString(1));
System.out.println("err_msg: " + call.getString(2));
call.close();
transaction.commit();
} catch (SQLException e) {
throw new SQLException(e);
}
}
});
} catch (Exception e) {
e.printStackTrace();
transaction.rollback();
return false;
}
場合は、前:
I)が(関連付けられたCallableStatementを実行しようとしているが、それは私にNullPointerExceptionがここ
java.lang.NullPointerException
at oracle.jdbc.driver.T4C8Oall.getNumRows(T4C8Oall.java:977)
at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:1363)
...
を返しますが(私は休止状態を使用しています)のコードです()を実行、私はSQLSyntaxErrorException(:無効な文字ORA-00911)を持っている
call.setEscapeProcessing(false);
を設定しました
お手伝いできますか?手順の
2つの最後のパラメータがOUTにあります。ここでのFab
は、ソリューションです。 私たちはOUTパラメータとしてそれらを管理しなければならなかったことを考えた:
CallableStatement call = connection.prepareCall("{?, ? = call bksgnvcrm.createorreturnproduct1nc(..., ?, ?)}");
しかし、彼らはOUT INしているとして、これらのパラメータはのように宣言する必要があります。
CallableStatement call = connection.prepareCall("{call bksgnvcrm.createorreturnproduct1nc(..., ?, ?)}");
そして最後にOUTとして登録このような:
call.registerOutParameter(i, Types.INTEGER);
call.setInt(i++, errcode);
call.registerOutParameter(i, Types.VARCHAR);
call.setString(i++, errmsg);
私は、これはあなたを助けることを願って:)
...知っている他の誰か1日を、助けるかもしれませんか?、? =コールbksgnvcrm - それは何ですか?あなたは関数呼び出しから2つの結果を返すことはできません。 – OldProgrammer