2012-01-23 2 views
0

У меня есть метод, который вызывает процедуру oracle одновременно с вставкой в ​​oracle, оператор insert работает, но процедура не работает. Я не получаю никаких ошибок. кто-нибудь может понять, почему это не работает?Вызов процедуры Oracle

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(); 
    } 
+0

«но процедура не делает» - Можете ли вы это объяснить? –

+0

данные правильно вставлены в таблицу, но процедура не выполняется. – Mike

+0

@Mike, что вы делаете, чтобы предположить, что процедура не выполнена? Можете ли вы дать нам некоторый контекст job_vacationconflict_notify? –

ответ

0

Означает ли ваша процедура даты в качестве входных данных? Если это так, попробуйте передать значения даты и не полагаться на неявное преобразование. Если SP ожидает строки, убедитесь, что вы отформатируете даты точно так же, как ожидает SP (добавьте отладочную печать с обеих сторон, dbms_output и dbms_pipe - ваши друзья).

Также рассмотрите возможность замены параметров для query; этот код begs для SQL injection%)

+0

Я изменил код так, чтобы он занимал даты, и его все еще не работает 'cs.setInt (1, Integer.parseInt (di)); cs.setDate (2, (java.sql.Date) sdf.parse (sd)); cs.setDate (3, (java.sql.Date) sdf.parse (ed)); cs.execute(); ' – Mike

+0

проверьте правильность формата даты, я вижу 2 несовместимых разных формата: SimpleDateFormat (« dd-MMM-yyyy ») и« YYYY-MM-DD »в вашем коде – alephx