有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java故意重新创建多线程SQL错误

所以我有一个多线程的批处理器,它接受一些值并将它们插入到Oracle数据库中。我收到报告说此处理器正在记录Unique Constraint错误

这是处理器用于插入的查询:

INSERT INTO TABLE_T 

(VALUE_A_PK, VALUE_B_PK, VALUE_C, VALUE_D, VALUE_E, VALUE_F, VALUE_G, VALUE_H, VALUE_I, VALUE_J) 

      SELECT ?,?,?,?,?,?,?,?,?,? FROM DUAL 

               WHERE NOT EXISTS

                        (SELECT 1 FROM TABLE_T WHERE 

                         VALUE_A_PK= ? AND VALUE_B_PK = ?);

我知道解决这个问题的方法,但首先我需要重新创建错误,以证明我已经解决了它。 尽管向处理器提供了多个重复记录,但我无法手动重新显示错误

我几乎可以肯定,这是一个多线程问题,多个线程试图同时插入一条新记录

是否有可靠的方法强制多个线程同时执行?如果我能做到这一点,那么似乎我应该能够让错误弹出了回来


共 (1) 个答案

  1. # 1 楼答案

    不可能在两个会话中同时发出两个声明。像DBMS_SCHEDULER这样的工具可能可以在一秒钟内可靠地启动两个进程,但要模拟一行插入的主键错误,您需要更高的精度

    在循环中的两个单独会话中运行语句可能更容易,只需等待其中一个会话失败即可。为了重现间歇性问题,我已经做过几次了

    在两个或多个会话中运行此伪代码,并等待出现错误:

    begin
        for i in 1 .. 1000000 loop
            INSERT INTO TABLE_T ...
        end loop;
    end;
    /