Question

J'ai une méthode qui appelle une procédure Oracle en même temps qu'elle s'insère dans Oracle, l'instruction INSERT fonctionne mais pas la procédure. Je ne reçois aucune erreur. Quelqu'un peut-il voir pourquoi cela ne fonctionne pas?

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();
    }
Était-ce utile?

La solution

Votre procédure s'attend-elle à des dates en entrée? Si c'est le cas, essayez de passer les valeurs de date et de ne pas compter sur la conversion implicite. Si le SP attend des cordes, assurez-vous de formater les dates exactement de la même manière que le SP attend (ajoutez l'impression de débogage des deux côtés, dbms_output et dbms_pipe êtes vous amis).

Veuillez également envisager d'utiliser la substitution des paramètres par query; ce code époute pour l'injection SQL)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top