我试图提高插入批量操作的性能,在使用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部分的情况下完成这项工作,并且我想知道是否有更好的方法。这感觉非常黑客,但改善是必不可少的。