如何在不手动指定PK的情况下仅将唯一数据加载到我的oracle表中?

艾丽·鲁曼

假设我有一个real_table在column1上有主键的表

我可以像这样将数据加载到其中:

insert into real_table
SELECT * FROM EXTERNAL (
    (col1 VARCHAR2 (50),
     col2 VARCHAR2 (50),
     col3 VARCHAR2 (50),
     col4 VARCHAR2 (50) )

    TYPE ORACLE_LOADER
    DEFAULT DIRECTORY data_to_input
    ACCESS PARAMETERS (
        RECORDS DELIMITED BY NEWLINE
        skip 1
        FIELDS TERMINATED BY ','
        MISSING FIELD VALUES ARE NULL 
        ) 
    LOCATION ('data.CSV')
    REJECT LIMIT UNLIMITED) ext
    where not exists (
        select * from real_table r
        where r.col1 = ext.col1
    );

但这意味着我必须手动指定PK。对于相对较小的表,手动进行操作不是一个大问题。我也可以这样做:

insert into real_table
SELECT * FROM EXTERNAL (
    (col1 VARCHAR2 (50),
     col2 VARCHAR2 (50),
     col3 VARCHAR2 (50),
     col4 VARCHAR2 (50) )

    TYPE ORACLE_LOADER
    DEFAULT DIRECTORY data_to_input
    ACCESS PARAMETERS (
        RECORDS DELIMITED BY NEWLINE
        skip 1
        FIELDS TERMINATED BY ','
        MISSING FIELD VALUES ARE NULL 
        ) 
    LOCATION ('data.CSV')
    REJECT LIMIT UNLIMITED) ext
    where not exists (
        select * from real_table r
        where r.col1 = ext.col1
        and r.col2 = ext.col2
        and r.col3 = ext.col3
        and r.col4 = ext.col4
    );

但是,对于具有10或20列的表我该怎么办?我的解决方案对于一张大桌子来说可笑吗?我不是在抱怨必须输入内容,我想知道检查每条记录所需的处理是否很荒谬。我的解决方案是某种经典的菜鸟错误吗?人们如何确保自己的记录是唯一的?

另外,如果我尝试一次输入一个记录,并且它是重复记录,那么我的数据库将为该重复记录提供自己的唯一PK。(我将PK列定义为NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY

我一直在对自己说:“ PK将确保记录是唯一的!PK将解决我所有的问题并治愈癌症!” 我不敢相信我花了这么长时间才意识到那些独特的记录仍然可能是彼此重复的。

乔治·约瑟夫

您用来插入real_table的查询很容易是将批量数据加载到数据库中的最佳方法。

insert 
  into dest_table
 select <cols>
  from source_table
 where exists (select * from dest_table where <equate on unique keys>

这是因为数据库只看到一个简单的SQL,而不会检查每行是否重复,而是先插入一行,然后再插入下一行,依此类推等等。

为了确保唯一性,您只需要将real_table中的唯一列与外部表中的对应列进行比较,但是如果您拥有一个包含所有列都是唯一的平面文件,那将是非常不寻常的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在不手动编写障碍的情况下将障碍分布到我的网格?

来自分类Dev

如何在不手动在SQL中手动键入列名的情况下透视表

来自分类Dev

在不使用“ .insert” /不手动重新排序的情况下添加列时,如何在数据表中的特定位置插入列?

来自分类Dev

如何在不手动设置每个属性的情况下更新数据库中的实体对象?

来自分类Dev

在不手动刷新asp.net的情况下如何在gridview中更新数据?

来自分类Dev

如何在不先定义表中的列的情况下将数据加载到PostgreSQL中?

来自分类Dev

如何在不手动输入的情况下让tmux打开一组窗格?

来自分类Dev

Sitecore:如何在不丢失数据的情况下将字段移动到我的基本模板之一

来自分类Dev

Sitecore:如何在不丢失数据的情况下将字段移动到我的基本模板之一

来自分类Dev

如何在不更新“搜索”输入字段的情况下手动搜索数据表

来自分类Dev

如何在不手动列出查询中的所有值的情况下使用 SQL 创建分发表?

来自分类Dev

如何在不手动定义宽度的情况下居中放置div

来自分类Dev

如何在不手动修改文件的情况下编辑部署?

来自分类Dev

如何在不手动复制和粘贴的情况下遍历python生成的列表?

来自分类Dev

如何在不手动计算偏移的情况下以编程方式堆叠视图?

来自分类Dev

如何在不使用.get()或.load()的情况下将Ajax数据加载到DIV中?

来自分类Dev

如何在不冲突的情况下将同一数据分发给多个用户

来自分类Dev

如何在没有pip安装的情况下仅手动复制单个站点程序包?

来自分类Dev

如何在不破坏任何其他应用程序的情况下将手动安装的python用于个人程序?

来自分类Dev

我可以在不手动输入base :: Method()的情况下递归地在每个库中调用method吗?

来自分类Dev

如何在不手动关闭选项卡的情况下保持Firefox的可用性?

来自分类Dev

如何在不手动关闭选项卡的情况下保持Firefox的可用性?

来自分类Dev

如何在不选择“项目”的情况下创建新问题(手动选择 project_id)?

来自分类Dev

如何在不指定其他参数的情况下仅播种我的测试数据库?

来自分类Dev

如何修复angular 8中的变化检测方法。如何在不手动编写的情况下立即实现这一点,每次检测变化

来自分类Dev

如何在没有手动设置的情况下将绑定属性作为参数传递

来自分类Dev

如何在不使用C#手动更新ID的情况下将依赖LINQ插入SQL实体?

来自分类Dev

如何在不创建表的情况下从文本文件加载mysql中的数据(模式)

来自分类Dev

如何在不指定列名称的情况下返回表第一列中的所有值?

Related 相关文章

  1. 1

    如何在不手动编写障碍的情况下将障碍分布到我的网格?

  2. 2

    如何在不手动在SQL中手动键入列名的情况下透视表

  3. 3

    在不使用“ .insert” /不手动重新排序的情况下添加列时,如何在数据表中的特定位置插入列?

  4. 4

    如何在不手动设置每个属性的情况下更新数据库中的实体对象?

  5. 5

    在不手动刷新asp.net的情况下如何在gridview中更新数据?

  6. 6

    如何在不先定义表中的列的情况下将数据加载到PostgreSQL中?

  7. 7

    如何在不手动输入的情况下让tmux打开一组窗格?

  8. 8

    Sitecore:如何在不丢失数据的情况下将字段移动到我的基本模板之一

  9. 9

    Sitecore:如何在不丢失数据的情况下将字段移动到我的基本模板之一

  10. 10

    如何在不更新“搜索”输入字段的情况下手动搜索数据表

  11. 11

    如何在不手动列出查询中的所有值的情况下使用 SQL 创建分发表?

  12. 12

    如何在不手动定义宽度的情况下居中放置div

  13. 13

    如何在不手动修改文件的情况下编辑部署?

  14. 14

    如何在不手动复制和粘贴的情况下遍历python生成的列表?

  15. 15

    如何在不手动计算偏移的情况下以编程方式堆叠视图?

  16. 16

    如何在不使用.get()或.load()的情况下将Ajax数据加载到DIV中?

  17. 17

    如何在不冲突的情况下将同一数据分发给多个用户

  18. 18

    如何在没有pip安装的情况下仅手动复制单个站点程序包?

  19. 19

    如何在不破坏任何其他应用程序的情况下将手动安装的python用于个人程序?

  20. 20

    我可以在不手动输入base :: Method()的情况下递归地在每个库中调用method吗?

  21. 21

    如何在不手动关闭选项卡的情况下保持Firefox的可用性?

  22. 22

    如何在不手动关闭选项卡的情况下保持Firefox的可用性?

  23. 23

    如何在不选择“项目”的情况下创建新问题(手动选择 project_id)?

  24. 24

    如何在不指定其他参数的情况下仅播种我的测试数据库?

  25. 25

    如何修复angular 8中的变化检测方法。如何在不手动编写的情况下立即实现这一点,每次检测变化

  26. 26

    如何在没有手动设置的情况下将绑定属性作为参数传递

  27. 27

    如何在不使用C#手动更新ID的情况下将依赖LINQ插入SQL实体?

  28. 28

    如何在不创建表的情况下从文本文件加载mysql中的数据(模式)

  29. 29

    如何在不指定列名称的情况下返回表第一列中的所有值?

热门标签

归档