2

配列型を必要とする JDBC ストアド関数 (callable ステートメントを使用) に NULL 値を渡すのに問題があります。これは、IN パラメータを NULL に設定しようとしている場合にのみ問題になります (たとえば、空の配列を作成して渡すことはできますが、そうする必要はありません)。

たとえば、回避策としてこれを行うことができます。

callableStatement.setObject(index, callableStatement.getConnection.createArrayOf("numeric", Array().asInstanceOf[Array[AnyRef]]))

しかし、これは私を悩ませます。まず、NULL 配列を渡すための API があるはずです。第二に、正当な理由もなく空の配列を作成しています (これはワンライナーではないため、正しい配列型を作成する必要があります。いくつかの異なる型をサポートする必要があります)。ぐちゃぐちゃになります。

私はこれを行うことができるはずです(または少なくともかなり似たようなこと):

callableStatement.setNull(index, Types.ARRAY)

ただし、例外が発生します。

com.edb.util.PSQLException: エラー: 関数 app_fetch_user_list_pkg.n_execute(文字可変、文字可変[]、文字可変、ブール値、整数) が存在しません

何か案は?(私たちは Postgresql/EDB と Oracle を使用しています...これまでのところ、私は Postgresql インスタンスを試してきました)。

4

2 に答える 2

2

これを試して:

callableStatement.setString(index, "{}");
于 2015-06-02T23:10:48.177 に答える