سؤال

لدي طريقة تستدعي إجراء أوراكل في نفس الوقت الذي يتم فيه إدراجه في أوراكل، تعمل عبارة الإدراج ولكن الإجراء لا يعمل.أنا لا أتلقى أي أخطاء.يمكن لأي شخص أن يرى لماذا هذا لا يعمل؟

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();
    }
هل كانت مفيدة؟

المحلول

هل يتوقع الإجراء الخاص بك التواريخ كمدخل؟إذا كان الأمر كذلك، فحاول تمرير قيم التاريخ ولا تعتمد على التحويل الضمني.إذا كان مقدم الخدمة يتوقع سلاسل، فتأكد من تنسيق التواريخ تمامًا بنفس الطريقة التي يتوقعها مقدم الخدمة (أضف طباعة تصحيح الأخطاء على كلا الجانبين، dbms_output و dbms_pipe هم أصدقائك).

يرجى أيضًا التفكير في استخدام استبدال المعلمة لـ query;هذا الرمز يتوسل لحقن SQL %)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top