我的要求是我需要读取CSV文件数据并使用数据库中的一个现有表进行查询以更新一些记录。我认为有一种方法是创建一个新表(temp)并将CSV文件加载到该表中并使用现有表查询但我发现我没有权限创建新表或目录(用于外部表方法。
然后我想通过表变量来做这件事,但我没有得到如何将数据加载到表变量中。我写了以下查询,但它说
'表格名称无效'
DECLARE
TYPE t IS TABLE OF VARCHAR2(15);
UPDATEPARTYID t;
BEGIN
SELECT *
BULK COLLECT INTO UPDATEPARTYID
FROM 'C:\Test\PartyID.csv';
END;
我曾经在Sql Server上工作过,所以对Oracle不太熟悉。我使用的是Sql Developer和Oracle11g,.csv文件中有数百万条记录。任何帮助,将不胜感激。
更新
输入文件的结构:
OldID,NewID
015110044200015,099724838000015
069167641100015,099724838000015
016093943300015,099728485000015
033264160300015,099728485000015
035968914300015,099728485000015
087580324300015,099728485000015
现有表中有一个名为PartyID(Varchar2(15))的列,我需要使用新的聚会ID更新这些ID,这些ID与输入文件的OldID相匹配。
新目标表的结构将是:
From Party ID (Varchar2 15)
To Party ID (Varchar2 15)
Created Date Sysdate
Updated Date Sysdate
Status Char (1) S: Success, F: Failure
No.Of Tries Integer(3) Default value 0
如果尝试次数超过3次,则会将其标记为“失败”。
答案 0 :(得分:1)
要将大量数据从文本文件加载到Oracle,SQL*Loader utility是一个不错的选择。该软件包含在Oracle客户端安装中(您可以下载,例如here)。
假设您将数据导入具有结构的目标表(target_table
)
CREATE TABLE target_table (
from_party VARCHAR2(15) NOT NULL,
to_party VARCHAR2(15) NOT NULL,
created DATE,
updated DATE,
status CHAR(1),
tries NUMBER(1)
)
并使用具有以下结构的两列源数据文件(在路径/path/to/party_import.csv
中)
OldID,NewID
015110044200015,099724838000015
069167641100015,099724838000015
016093943300015,099728485000015
033264160300015,099728485000015
035968914300015,099728485000015
087580324300015,099728485000015
您可以使用包含以下内容的control file:
OPTIONS (SKIP=1)
LOAD DATA
INFILE '/path/to/party_import.csv'
BADFILE 'import.bad'
INSERT
INTO TABLE target_table
fields terminated by "," TRAILING NULLCOLS
(
from_party,
to_party,
created sysdate
)
要运行SQL * Loader,您可以调用以下命令:
sqlldr username/pw@db_connection control=/path/to/control_file.ctl
这假定事先已完成以下设置:
sqlldr.exe
在路径中,或者使用可执行文件的绝对路径db_connection
文件并设置tnsnames.ora
环境变量(示例)配置了数据库连接(TNS_ADMIN
) here)默认情况下,只有在处理完整个文件后才会提交事务。如果你想提交,例如每1000行,您可以使用ROWS
选项执行此操作:
sqlldr username/pw@db_connection control=/path/to/control_file.ctl ROWS=1000
答案 1 :(得分:0)
仅使用C#的另一种方法:
使用SQLBulkCopy类将批量数据从CSV文件插入数据库表
https://www.c-sharpcorner.com/article/insert-bulk-data-from-csv-file-to-database-table-using-sqlbu/