>FIle nameemp.txt
- 文本文件包含如下数据:
emp_no,emp_EXPIRY_DATE,STATUS
a123456,2020-07-12,A
a123457,2020-07-12,A
我想使用存储过程将数据插入临时表中。
您使用哪个数据库?"Oracle"SQL Developer看起来像"Oracle"(当然(,但是 - 您作为评论发布的代码不是Oracle。
无论如何,如果是这样,那么做你打算做的事情将需要UTL_FILE
包。CSV文件应该放在一个目录(通常在数据库服务器上(中,该目录是目录的源(作为Oracle对象(;应该加载数据的用户应该对其具有读取(和写入?(权限。
或者,您可以将 CSV 文件用作外部表。该选项可能更简单,因为它允许您针对它编写普通SELECT
语句,即从中读取数据并插入到驻留在 Oracle 数据库中的目标表中。此选项还需要"目录"内容。
或者,如果要在本地执行此操作,请考虑使用SQL*Loader;创建控制文件并加载数据。此选项可能非常快,比以前的选项快得多。对于小文件,您不会看到任何差异,但是 - 对于大量数据 - 这可能是您的选择。
SQL*Loader 示例:
测试表:
SQL> create table test
2 (emp_no varchar2(10),
3 emp_expiry_date date,
4 status varchar2(1));
Table created.
控制文件:
options (skip=1)
LOAD DATA
infile emp.txt
replace
INTO TABLE test
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
emp_no,
emp_expiry_date "to_date(:emp_expiry_date, 'yyyy-dd-mm')",
status
)
加载会话和结果:
SQL> alter session set nls_date_Format = 'yyyy-mm-dd';
Session altered.
SQL> $sqlldr scott/tiger control=test13.ctl log=test13.log
SQL*Loader: Release 11.2.0.2.0 - Production on Sri Pro 11 21:02:44 2019
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Commit point reached - logical record count 1
Commit point reached - logical record count 2
SQL> select * from test;
EMP_NO EMP_EXPIRY S
---------- ---------- -
a123456 2020-12-07 A
a123457 2020-12-07 A
SQL>