java - 在大量插入 SQLLDR 后获取或检索生成的 PK

标签 java sql weblogic oracle12c sql-loader

我现在会直接说明我的情况。我正在从事一个项目,该项目将基于 Excel(xlsx、xls)文件执行“基本负载”过程。它是使用 JDBC 驱动程序用 java 开发的。现在这个项目正在运行,它需要一个 excel 文件并根据配置执行插入不同表的操作。关键是:这项工作花费的时间太长,导致效率低下。 (在数据库中插入 3000 条记录大约需要 2 小时)。将来,这个软件将插入大约 30k 条记录,而且速度会慢得令人痛苦。所以我需要提高它的效率,我在想:而不是通过 JDBC 驱动程序从 java 插入。我将使用 SQLLDR 生成要插入到数据库中的控制文件和数据文件。

我现在面临的问题是,我需要将这些数据插入到几个表中,并且这些表是相互关联的。这意味着,如果我将一个人插入“Person_table”,我将需要由数据库序列生成的主键来插入“地址、电话、电子邮件等”。到其他表中,所以我不知道如何通过SQLLDR获取第一次插入时生成的主键。

我还不确定 SQLLDR 是否是我执行此操作的最佳方法,但我想是的,因为 DBMS 是 Oracle

你们能指导我如何做我向你们解释过的我需要做的事情吗?任何建议都受到欢迎并受到好评。如果您的建议不是关于如何使用 SQLLDR 执行此操作,也没关系。

我现在有点陷入困境,我真的很感谢你能给我的帮助。

最佳答案

SQL*Loader 无法读取 native Excel 文件(至少据我所知)。因此,您必须将结果保存为 CSV 文件。

由于您需要操作外键约束,请考虑切换到外部表功能 - 基本上,后台仍然是SQL*Loader,但您可以针对这些文件/表编写(PL/)SQL (是的 - 存储在硬盘上的 CSV 文件就像 Oracle 表一样)。

因此,您需要“加载”一个表,填充主键值,填充另一个(子)表 - 可能会进入“临时”表(不一定是全局临时表),这不会不启用任何约束,填充外键值并将数据移动到“真实”目标表中,该目标表的约束现在不会失败。

可能的缺点:CSV 文件必须驻留在数据库服务器可访问的目录中,因为您必须创建一个目录(Oracle 对象)并授予所需的权限(通常>读、写)给将要使用它的用户。目录通常是在服务器本身上创建的;如果没有,您在创建它时必须使用 UNC。

现在你有一些东西可以阅读/研究;看看它对你是否有意义。

关于java - 在大量插入 SQLLDR 后获取或检索生成的 PK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50935801/

相关文章:

java - 使用 SQL Server 2005/2008 的最新 jdbc 驱动程序时,准备好的语句、 View 和存储过程的性能比较如何?

mysql - sql中按日期排序

java - 将ear文件部署到weblogic 10g

weblogic - 如何在 Weblogic 响应中配置 HTTP header

java - 安卓音频电平表

java - 使用 SimpleDateFormat 格式化日期时抛出 ClassCastException

java - 如何在循环中访问对象?

sql - Laravel ajax 在追加中使用 if 条件

php - 搜索匹配 'meta_value' 和 'post_id' 时获取 'meta_key' , 'meta_value' 组合

java - 在 Weblogic Server 中设置 Java 堆空间