[英]Java code only works when submitted the second time
我在下面显示了这段代码。 我的挑战是,代码仅在提交后的第二次(第三次)工作。 我在两次提交之间没有做任何更改,但是第一次没有做应该做的事情。 两次我都得到一份工作编号,好像一切都很好。
过程“ execute_plan”应该更新表中的某些行,直到第二次提交后才执行。
我已经尝试监视USER_LOGS表,并且看不到第一次提交和第二次提交之间没有任何区别。
我尝试用执行用户模式中表上的简单更新替换对另一个模式的调用。 这是第一次。
因此,问题似乎与在另一个架构中调用过程有关。
编辑:我也试图手动添加conn.commit();,我已经在PL / SQL中添加了提交,但是全部都是徒劳的:-(
整个逻辑从java rest服务调用。
BasicDataSource bds = Util.getDatasource(nodeData);
String plsql = "declare x number; begin x := dlcm_agent.runner.execute_plan(" + nodeData.get("lcPlanId") + "); end;";
Connection conn = null;
JSONObject json = new JSONObject();
try {
conn = bds.getConnection();
CallableStatement stmt = conn.prepareCall("begin dbms_job.submit(?,?); end;");
stmt.setString(2, plsql);
stmt.registerOutParameter(1, Types.BIGINT);
stmt.execute();
json.put("success", true);
} catch (Exception e) {
json.put("success", false);
json.put("message", e.getMessage());
} finally {
if (conn != null) conn.close();
}
return json.toString();
这让我发疯,所以如果有人有任何输入,请告诉我
首先,最好关闭已使用的stmt。 另外,建议对执行一些数据操作的stmts使用executeUpdate。
第三,dbms_job.submit-只需将作业提交到作业队列。 它不执行它(您可能知道)。
原来是未处理的比赛条件。 我在提交的作业完成之前更新了一个表,这导致了错误。
谢谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.