场景:
- 我有一个巨大的 .csv 文件(百万行)。
- 使用
sqlldr
(SQL Loader)我必须创建一个包含 CSV 中所有数据的临时表。 - 在此之后我必须对临时表做一些处理(大写更新一些列等)。
- 处理后,我必须从临时表中取出每一行,进行一些额外的检查并将这些行插入到另一个表中(在生产中大量使用)。
你建议如何进行所有这些处理,这样我才不会影响生产环境的整体性能?
(注意:我不应该事先预处理 .csv)。
任何建议将不胜感激!
最佳答案
我知道您曾说过要使用 SQL Loader,但您可能想考虑使用外部表,因为它可能会使事情变得更容易。您可以将外部表声明为类似
create table EXTERNAL_HR_DATA (
EMPNO NUMBER(4),
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2))
Organization external
(type oracle_loader
default directory testdir
access parameters (records delimited by newline
fields terminated by ‘,’)
location (‘emp_ext.csv’))
reject limit 1000;
这将允许您使用标准 SELECT 语句读取(但不能更改)文件中的数据。然后您可以从外部表中选择并将数据直接插入到您的“临时”表中,至少在插入期间进行一些编辑:
INSERT INTO TEMP_HR_DATA
SELECT EMPNO,
UPPER(TRIM(ENAME)),
UPPER(TRIM(JOB)),
MGR,
HIREDATE,
SAL,
COMM,
DEPTNO
FROM EXTERNAL_HR_DATA;
分享和享受。
关于sql - Oracle 更新生产数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4248027/