gpt4 book ai didi

java - 转换 PLSQL 函数以处理利用 Oracle ARRAY 的 jdbc 语句

转载 作者:行者123 更新时间:2023-12-01 15:13:18 24 4
gpt4 key购买 nike

我有以下 PL/SQL block ,它创建一个插入新猫的过程:

CREATE OR REPLACE PROCEDURE INSERT_NEW_CAT(AGE NUMBER, WEIGHT NUMBER, NAME VARCHAR2)  
AS
BEGIN
INSERT INTO CATS(cat_id,age,weight,name)
VALUES(cat_id_sequence.nextval,age,weight,name);
END INSERT_NEW_CAT;

以及以下 Java block 来批量插入这些猫:

CallableStatement statement = conn.prepareCall("{CALL insert_new_cat(?,?,?)}");  
for(int i = 0; i < 50000;i++)
{
statement.setInt(1, i);
statement.setInt(2,i);
statement.setString(3,"Test");
statement.addBatch();
if(i % 16382== 0) //max value my batch can support on my hardware
{
statement.executeBatch();
}
}

statement.executeBatch();

所以问题是我每秒只能保留 700 条记录,这是相当慢的。我认为问题在于我每行调用一次上述 PL/SQL 函数(或每批条目调用一次)。如何重写上述函数以获取这些语句的数组并进行批量插入,以将对函数的调用次数减少到 N modulo 16382 + 1?数据库为Oracle 10g。

最佳答案

创建数据库对象类型:

CREATE TYPE CAT AS OBJECT(
AGE NUMBER, WEIGHT NUMBER, NAME VARCHAR2
);

然后创建相同的集合类型:

CREATE TYPE CATS IS TABLE OF CAT;

在您的 PL/SQL 过程中接收猫列表并使用 FORALL -> 这对于性能很重要。

使用StructDescriptor从java构建您的CAT对象和CATS集合和ArrayDescriptor

关于java - 转换 PLSQL 函数以处理利用 Oracle ARRAY 的 jdbc 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12007106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com