使用FORALL语句从jdbc预处理语句中插入数据

时间:2017-07-03 16:14:58

标签: oracle jdbc plsql

我试图提高插入批量操作的性能,在使用jdbc批量插入(addBatch()+ executeBatch())的oracle 11g2数据库中最多可能需要10分钟。

我尝试使用带有jdbc批处理的APPEND_VALUES提示,但结果有异常:

java.sql.BatchUpdateException: ORA-12838: cannot read/modify an object after modifying it in parallel

所以我试图以这种方式使用带有PSQL的FORALL语句:

DECLARE
   type TObjectTable is table of ALL_OBJECTS%ROWTYPE;
   ObjectTable$ TObjectTable;
   l_data ARRAY;
   CURSOR c IS WITH ALL_OBJECTS as (
        SELECT 1    'firstname1',   'secondname' FROM DUAL UNION ALL,
        SELECT 2    'firstname2',   'secondname2' FROM DUAL
         ) SELECT * FROM ALL_OBJECTS;
BEGIN
   OPEN c;
   LOOP
   FETCH c BULK COLLECT INTO ld_data LIMIT 2;
   FORALL i in 1..l_data.COUNT
   INSERT INTO t1 VALUES l_data(i);
   END LOOP;
   CLOSE c;
END;

其中WITH子句中的值将是javacode中的绑定参数。 我仍然无法在没有jdbc部分的情况下完成这项工作,并且我想知道是否有更好的方法。这感觉非常黑客,但改善是必不可少的。

0 个答案:

没有答案