Oracle プロシージャの呼び出し
-
12-11-2019 - |
質問
oracle への挿入と同時に oracle プロシージャを呼び出すメソッドがあります。insert ステートメントは機能しますが、プロシージャは機能しません。エラーは発生しません。なぜこれが機能しないのかわかる人はいますか?
Class.forName("oracle.jdbc.driver.OracleDriver");
String connectionString = "jdbc:oracle:thin:@" + oracle_ip_address + ":" + oracle_db_port + ":" + oracle_db_sid;
Connection conn = DriverManager.getConnection(connectionString, oracle_db_username, oracle_db_password);
ResultSet rs = stmt.executeQuery("Select * from Dropper");
CallableStatement cs = conn.prepareCall("{ call TTMS.job_vacationconflict_notify(?,?,?)}");
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");
Statement stmt2 = conn.createStatement();
while (rs.next()){
String di = rs.getString("DROPPER_ID");
String sd = rs.getString("BEGIN_DT").replace(" 00:00:00.0", "");
String ed = rs.getString("END_DT").replace(" 00:00:00.0", "");
String vi = rs.getString("VACATION_ID");
String md = rs.getString("MODIFY_DT").replace(" 00:00:00.0", "");
query = "INSERT INTO DROPPER_VACATIONS(DROPPER_ID, BEGIN_DT, END_DT, CREATE_DT, CREATE_BY, MODIFY_DT, MODIFY_BY, COMMENTS, VACATION_ID) "
+ "VALUES ('"+di+"',to_date('"+sd+"','YYYY-MM-DD'),to_date('"+ed+"','YYYY-MM-DD'),sysdate,'MJRUTLED',to_date('"+md+"','YYYY-MM-DD'),'MJRUTLED','','"+vi+"')";
stmt2.executeUpdate(query);
cs.setInt(1,Integer.parseInt(di));
cs.setString(2,sdf.parse(sd).toString());
cs.setString(3,sdf.parse(ed).toString());
cs.execute();
}
解決
あなたのプロシージャでは入力として日付を期待していますか?その場合は、暗黙的な変換に依存せず、日付値を渡すようにしてください。SP が文字列を予期している場合は、SP が予期しているのとまったく同じ方法で日付をフォーマットしていることを確認してください (両面にデバッグ出力を追加し、 dbms_output
そして dbms_pipe
あなたの友達です)。
また、パラメータ置換の使用を検討してください。 query
;このコード 懇願する SQL インジェクションの場合 %)
所属していません StackOverflow