如何在存储过程中使用逗号分隔值从文本文件中读取数据并插入到临时表中



>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>

相关内容

  • 没有找到相关文章

最新更新