2

Java アプリケーションで PL/SQL プロシージャを呼び出して、データベース エントリを更新しています。

Connection connection = null;
CallableStatement preparedCall = null;
Integer result = 0;
preparedCall = connection.prepareCall("{ ?= call pkg_temp.update_data(?, ?)}");
preparedCall.registerOutParameter(1, OracleTypes.BOOLEAN);
preparedCall.setString(2, variable1);
preparedCall.setString(3, cariable2);
result = preparedCall.executeUpdate();

しかし、executeUpdate() で以下のエラーが発生しています

Severe: java.sql.SQLException: ORA-06550: line 1, column 13: PLS-00382: expression is of wrong type ORA-06550: line 1, column 7: PL/SQL: Statement ignored

理由: PL\SQL では、プライマリ タイプではないブール型に登録できません。

この関数を呼び出すにはどうすればよいですか?

4

1 に答える 1

2

最後に、ブール値を取り、このような整数を返すラッパーを作成することができました。

Connection connection = null;
CallableStatement preparedCall = null;
Integer result = 0;
preparedCall = connection.prepareCall(
                    "BEGIN " +
                    " ?:= CASE pkg_temp.update_data(?, ?) "+
                    " WHEN TRUE THEN 1 " +  " ELSE 0 " +
                    " END; " +
                    "END; "
                    );
preparedCall.registerOutParameter(1, OracleTypes.INTEGER);
preparedCall.setString(2, variable1);
preparedCall.setString(3, variable2);
result = preparedCall.executeUpdate();
int funcRetValue = preparedCall.getInt(1);
if (funcRetValue == 1) {
    retValue = true;
} else {
    retValue = false;
}
于 2015-09-22T06:47:34.650 に答える