初めて Oracle を使用し、通常は SQLServer を使用し、興味深い問題に遭遇しました。私はこの問題で髪を引き裂いていて、ランダムなことを試していて、たまたまうまくいきました。
そのため、最初は 2 つのパラメーターしかなく、すべて正常に機能していました。次に、ブール値を追加して、ストアド プロシージャに複数のパスを許可したいと考えました。私は自分の db 環境でテストしましたが、エラーはなく、期待どおりのデータが返されました。次に、このデータを取得するために Java コードに数行追加すると、突然 " wrong number or types of parameters
" エラーが発生します。
いくつかのことを試した後、Oracle の型を Boolean から Int に変更し、Java コードを " setBoolean(3, true)
" のままにして、すべてが機能するようにしました。
だから私の質問は:
1) Java 側でこの setBoolean() を使用して送信しているのは何ですか? Oracle は何を取得していますか?
2) 以前は「 」タイプだったのに何を期待していたのですか?Boolean
なぜこれが と互換性がないのsetBoolean()
ですか?
3) 速度を上げるには、Java setBoolean() または Oracle Varchar と setString() などの他の組み合わせで Oracle 型 int を使用する必要がありますか?
ジャワ:
String jobquery = "{call PKG_TEST.GET_PLAN_DATA(?,?,?)}";
CallableStatement callStmt = con.prepareCall(jobquery);
callStmt.setString(1,"15105");
callStmt.setString(2, "");
callStmt.setBoolean(3, true);
Oracle SP (以前):
PROCEDURE GET_PLAN_DATA(
NAME_N_IN IN VARCHAR2,
TYPE_C_IN IN VARCHAR2 DEFAULT NULL,
ONLY_RESTRICTIONS_IN IN BOOLEAN DEFAULT FALSE)
オラクルは次のように変更されました:
PROCEDURE GET_PLAN_DATA(
NAME_N_IN IN VARCHAR2,
TYPE_C_IN IN VARCHAR2 DEFAULT NULL,
ONLY_RESTRICTIONS_IN IN INT DEFAULT 0)