繁体   English   中英

Java代码仅在第二次提交时有效

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM