我有一个Excel文件有15列和1000的记录。我想加载数据到3个不同的Oracle表。我们该怎么做呢?我应该先把文件转换成csv格式吗?此外,还有一个复杂的任务。我需要在插入到表之前执行一些验证,例如,我在Excel中有一个列A,我想使用列A从Oracle表“tab”中导出值B,然后将B存储在表“tab”中。
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语句,并从那里插入到目标表中。掌握正则表达式可以真正帮助完成这样的任务。
ep6jt1vc2#
如果这是一个常规活动,使用SQLLDR-SQLLoader将原始数据加载到临时表中。编写一个存储过程,其中包含将数据从临时表转换到主表所需的业务逻辑
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个表,或者使用一些条件。
3条答案
按热度按时间dly7yett1#
一般来说,使用SQL处理原始数据更容易,因此第一步是以最简单的方式获得可查询的原始数据。
最简洁的解决方案是使用外部表。将Excel电子表格转换为CSV文件,然后定义一个外部表来查询该文件。然后您可以使用...
……甚至……
这取决于你需要遵守什么样的规则。
如果您的组织已经使用外部表,这应该很容易配置。但是,有些地方允许数据库与操作系统文件交互,因此您可能无法使用此方法。了解更多信息。
或者,您可以构建一个与CSV文件匹配的staging表,并使用SQLLoader将数据加载到其中。SQLLoader是一个客户端工具,因此使用它需要的权限较少。
如果你根本不想构建任何新的结构,你可以编辑CSV文件,从DUAL(使用UNION ALL)中形成一组SELECT语句,并从那里插入到目标表中。掌握正则表达式可以真正帮助完成这样的任务。
ep6jt1vc2#
如果这是一个常规活动,使用SQLLDR-SQLLoader将原始数据加载到临时表中。编写一个存储过程,其中包含将数据从临时表转换到主表所需的业务逻辑
z9smfwbn3#
您可以使用外部csv作为如下表:您的文件的位置在这里csv_dir/yourfile.csv
然后你可以选择从csv_test_table到任何你想要的地方。相同的数据到3个表,或者使用一些条件。