前言
以前,当使用本地路径来创建目录(使用本地驱动器,例如F:\ stats)时,将csv文件导入到外部表中时,此脚本已经起作用。 UNC路径(\\ station-1 \ ...)的strong>
脚本
CREATE OR REPLACE DIRECTORY csvdir AS '\\Station-1\mainFolder\stats';
DROP TABLE EXT_index;
CREATE TABLE EXT_index(
SESSION_STATION NVARCHAR2(60),"user" NVARCHAR2(20),"type" NCHAR(4),"date" DATE,"hour" NVARCHAR2(8),BATCH NUMber,STEP NUMber,VARIANTE NUMber,TIME_MS NUMber,NB_FOLDER NUMber,NB_DOC NUMber,NB_FIELDS NUMber,NB_FIELDS_SHOW NUMber,NB_FIELDS_CONFIRM NUMber,NB_FIELDS_EMPTY NUMber,NB_KEY NUMber,NB_CHAR NUMber,NB_USEFUL_CHAR NUMber
)organization external (
type oracle_loader
default directory csvdir
access parameters (
records delimited by newline skip 1
fields terminated by ';' lrtrim
missing field values are null (
SESSION_STATION,"user","type","date" date 'yyyy-mm-dd',"hour",BATCH,STEP,VARIANTE,TIME_MS,NB_FOLDER,NB_DOC,NB_FIELDS,NB_FIELDS_SHOW,NB_FIELDS_CONFIRM,NB_FIELDS_EMPTY,NB_KEY,NB_CHAR,NB_USEFUL_CHAR
)
)
location('INDEX.csv')
)
reject limit unlimited;
DROP TABLE TMP_index;
CREATE TABLE TMP_index AS(SELECT * FROM EXT_index);
信息
- 使用的数据库:OracleXE 18c
- 包含我们需要导入的csv的文件夹为' \\ Station-1 \ mainFolder \ stats ',并且位于远程工作站上,与运行数据库的本地计算机不同 >
问题
如前所述,当csvdir
是本地路径(F:\ mainFolder \ stats),csv导入到外部表中且临时表可以以后再从中创建就可以了。
- 当
csvdir
是 UNC路径时,错误如下:KUP-04027: file name check failed: INDEX.csv
- 当
csvdir
是映射到先前UNC路径的网络驱动器( J:\ 映射到\\ Station-1 \ mainFolder,例如{ {1}} = J:\ stats),错误如下:csvdir
尝试从KUP-04040: file INDEX.csv in CSVDIR not found
创建TMP_index
时,会同时发生这两种错误:
EXT_index
- 在SQL Developer中签入时,
CREATE TABLE TMP_index AS(SELECT * FROM EXT_index) Error report - ORA-29913: error in executing ODCIEXTTABLEOPEN callout ORA-29400: data cartridge error --> Either KUP-04027 or KUP-04040 here,depending on how csvdir was created <--
始终为空,该表似乎无法正确创建(即该表的EXT_index
选项卡甚至不显示列名)
为解决问题而采取的步骤
- 与拥有完全控制权的2个用户共享文件夹“ \\ Station-1 \ mainFolder ”:每个人和User1(我的帐户)
- 在具有数据库的计算机(我的本地计算机)上,此“ \\ Station-1 \ mainFolder ”已映射到网络驱动器: J:\
- 使用 J:\ 时,
Data
被创建为'J:\ stats' - 使用 \\ Station-1 \ mainFolder 时,
csvdir
被创建为'\\ Station-1 \ mainFolder \ stats' - 根据this link,服务
csvdir
和TNSListener
都开始登录我的帐户 User1
问题
如何将位于远程服务器上的csv文件导入本地外部表?