如何将数据从单个csv/excel文件传输到多个oracle表

9gm1akwq  于 2023-03-31  发布在  Oracle
关注(0)|答案(3)|浏览(137)

我有一个Excel文件有15列和1000的记录。我想加载数据到3个不同的Oracle表。
我们该怎么做呢?我应该先把文件转换成csv格式吗?
此外,还有一个复杂的任务。我需要在插入到表之前执行一些验证,例如,我在Excel中有一个列A,我想使用列A从Oracle表“tab”中导出值B,然后将B存储在表“tab”中。

dly7yett

dly7yett1#

一般来说,使用SQL处理原始数据更容易,因此第一步是以最简单的方式获得可查询的原始数据。
最简洁的解决方案是使用外部表。将Excel电子表格转换为CSV文件,然后定义一个外部表来查询该文件。然后您可以使用...

INSERT INTO << table1 >> (...)
 SELECT what_ever  FROM << external_table >>

……甚至……

INSERT ALL
    INTO << table1 >> (...)
    INTO << table2 >> (...)
    INTO << table3 >> (...)
SELECT *  FROM << external_table >>

这取决于你需要遵守什么样的规则。
如果您的组织已经使用外部表,这应该很容易配置。但是,有些地方允许数据库与操作系统文件交互,因此您可能无法使用此方法。了解更多信息。
或者,您可以构建一个与CSV文件匹配的staging表,并使用SQLLoader将数据加载到其中。SQLLoader是一个客户端工具,因此使用它需要的权限较少。
如果你根本不想构建任何新的结构,你可以编辑CSV文件,从DUAL(使用UNION ALL)中形成一组SELECT语句,并从那里插入到目标表中。掌握正则表达式可以真正帮助完成这样的任务。

ep6jt1vc

ep6jt1vc2#

如果这是一个常规活动,使用SQLLDR-SQLLoader将原始数据加载到临时表中。编写一个存储过程,其中包含将数据从临时表转换到主表所需的业务逻辑

z9smfwbn

z9smfwbn3#

您可以使用外部csv作为如下表:您的文件的位置在这里csv_dir/yourfile.csv

CREATE TABLE csv_test_table (
  COLUMN1 varchar2(255),
  COLUMN2 varchar2(255),
  COLUMN3 varchar2(255),
  COLUMN4 varchar2(255)

)
ORGANIZATION EXTERNAL (
  DEFAULT DIRECTORY csv_dir
  ACCESS PARAMETERS (
    records delimited BY newline
    skip 1
    fields 
    terminated BY ';' optionally enclosed BY '"' --or use ',' here
    lrtrim
    missing field VALUES are NULL
  )
  LOCATION ('yourfile.csv')  
);

然后你可以选择从csv_test_table到任何你想要的地方。相同的数据到3个表,或者使用一些条件。

相关问题