首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在大量插入SQLLDR之后获取或检索生成的PK

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

Stack Overflow用户
提问于 2018-06-20 03:40:28
回答 1查看 41关注 0票数 0

我现在就直截了当地说我的情况。我在一个项目中工作,该项目将执行基于excel (xlsx,xls)文件的“基本加载”程序。它是使用JDBC驱动程序在java中开发的。现在这个项目正在工作,它需要一个excel文件,并基于一个配置,它执行插入到不同的表。重点是:它花了太长的时间做这项工作,这使得它的效率很低。(在数据库中插入3000条记录大约需要2个小时)。在未来,这个软件将插入大约30k条记录,它将非常慢。所以我需要提高它的效率,我在想:而不是通过JDBC驱动程序从java插入。我将使用SQLLDR生成要插入到DB中的控制文件和数据文件。

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

我还不确定SQLLDR是否是我做这件事的最佳方法,但我猜是的,因为DBMS是Oracle

你们能指导我如何做我解释过的我需要做的事情吗?任何建议都是受欢迎的,也很受欢迎。如果您的建议不是关于如何使用SQLLDR实现这一点,那也没关系。

我现在有点手足无措,真的很感谢你能给我的帮助。

EN

回答 1

Stack Overflow用户

发布于 2018-06-20 03:52:10

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

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

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50935801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档