xil*_*pin 5 oracle oracle-11g import csv
我一开始试过谷歌,但没有运气。是否可以从 csv 文件更新表格?我正在使用 SQL 开发人员,并且正在使用脚本将编辑过的行导出到 csv 文件。我想通过客户端的 csv 文件更新编辑过的行。我不想导入整个文件,因为客户端已经有一个镜像表,我只想更新 csv 文件中的数据。这可能吗?
如果不是最好的方法是什么?
我建议您使用外部表。您可以使用ORACLE_LOADER
驱动程序在 CSV 文件上创建外部表,然后使用 DML(MERGE
例如)使用外部表中的数据更新现有表。
有关详细信息,请参阅 Oracle 实用程序指南。
下面是我如何从平面文件更新表的示例。
首先,创建平面文件所在的目录:
SQL> create directory ext_tab_dir as '/home/oracle/ora_load';
Directory created.
SQL> grant read, write on directory ext_tab_dir to spongebob;
Grant succeeded.
Run Code Online (Sandbox Code Playgroud)
然后创建外部表:
SQL> CREATE TABLE emp_load (empid number(3),
first_name CHAR(15),
last_name CHAR(20),
year_of_birth CHAR(4))
ORGANIZATION EXTERNAL (
TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir
ACCESS PARAMETERS (RECORDS FIXED 21 FIELDS (
empid char(1),
first_name CHAR(7),
last_name CHAR(8),
year_of_birth CHAR(4)))
LOCATION ('info.dat')
);
Run Code Online (Sandbox Code Playgroud)
我们假设您已经拥有要使用平面文件中的数据更新的表:
SQL> CREATE TABLE emp (empid number(3),
first_name CHAR(15),
last_name CHAR(20),
year_of_birth CHAR(4));
SQL> insert into emp values(1, 'SpongeBob', 'SquarePants', '1997');
SQL> insert into emp values(2, 'Patrick', 'Star', '1997');
SQL> insert into emp values(3, 'Squidward', 'Tentacles', '1997');
Run Code Online (Sandbox Code Playgroud)
(在这里,我只是加载了示例数据。)
现在这就是您所info.dat
包含的内容,例如:
[oracle@oca ~]$ cat ora_load/info.dat
1Alvin Tolliver1976
2KennethBaer 1963
3Mary Dube 1973
4NandiniShastri 1985
Run Code Online (Sandbox Code Playgroud)
此时,您只需使用外部表中的上述数据更新现有表:
SQL> merge into emp e1
using emp_load e2
on (e1.empid = e2.empid)
when matched then update set e1.first_name = e2.first_name,
e1.last_name = e2.last_name
when not matched then insert
values (e2.empid, e2.first_name, e2.last_name, e2.year_of_birth);
Run Code Online (Sandbox Code Playgroud)
结果如下:
SQL> select * from emp;
EMPID FIRST_NAME LAST_NAME YEAR
---------- --------------- -------------------- ----
1 Alvin Tolliver 1997
2 Kenneth Baer 1997
3 Mary Dube 1997
4 Nandini Shastri 1985
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12506 次 |
最近记录: |