是否有用于创建Oracle SQL Loader控制文件的良好用户界面?PL/SQL Developer包含一个"文本导入器"功能(提醒其中一个Excel导入向导)将文本文件导入表中,但使用专有格式而不是SQL Loader格式.对于SQL Loader格式,这样的东西会非常有用.
使用SQL Loader控制文件时如下:
OPTIONS(**skip=1**,bindsize=1048576,rows=1024)
LOAD DATA
INFILE 'C:\Documents and Settings\FIRST.CSV'
INFILE 'C:\Documents and Settings\SECOND.CSV'
APPEND
INTO TABLE table_name
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS
(
fields
)
Run Code Online (Sandbox Code Playgroud)
它会跳过FIRST.CSV文件的标题行,但会将SECOND.CSV中的标题行加载到Oracle表中.我的解决方案是将此控制文件分成两个单独的文件.有没有办法遵守一个控制文件?
在过去的几天里,我一直在使用Oracle的SQL*Loader来尝试将数据批量加载到Oracle中.在尝试了不同的选项组合后,我惊讶地发现传统的路径负载比直接路径负载运行得快得多.
关于这个问题的一些事实:
使用传统路径,加载在大约6秒内完成.
对于直接路径负载,加载大约需要20分钟.最糟糕的运行需要1.5小时才能完成,但服务器根本不忙.
如果启用了skip_index_maintenance,则直接路径加载将在2-3秒内完成.
我已经尝试了很多选项,但它们都没有给出明显的改进......难以置信,分类索引,多线程(我在多CPU服务器上运行SQL*Loader).他们都没有改善这种情况.
这是在SQL*Loader以直接模式运行期间我一直看到的等待事件:
有没有人知道直接路径加载出了什么问题?或者有什么我可以进一步检查,以真正挖掘问题的根本原因?提前致谢.
我有471个文件,总计约100GB.这些文件是"\ t"分开的,事务数据采用以下格式:
char(10) not null,
char(8) not null,
char(1) not null,
char(4) not null,
number not null,
char(1) not null,
char(1) not null,
char(1) not null,
number not null
Run Code Online (Sandbox Code Playgroud)
文件中事务的顺序很重要,需要保留,理想情况下使用主键ID.最初,我用sqlldr加载这些文件但是需要很长时间.我最近了解了外部表格.从战略角度看,哪种方法更好?外部表如何工作?谢谢.
我编写了一个具有以下查询的SQL脚本.查询工作正常.
update partner set is_seller_buyer=1 where id in (select id from partner
where names in
(
'A','B','C','D','E',... // around 100 names.
));
Run Code Online (Sandbox Code Playgroud)
但现在我不想在查询中写入大约100个名称,而是想从CSV文件中获取所有名称.我在互联网上阅读了关于SQL*Loader但我对更新查询没有太多了解.我的csv文件只包含名称.

我试过了
load data
infile 'c:\data\mydata.csv'
into table partner set is_wholesaler_reseller=1
where id in (select id from partner
where names in
(
'A','B','C','D','E',... // around 100 names.
));
fields terminated by "," optionally enclosed by '"'
( names, sal, deptno )
Run Code Online (Sandbox Code Playgroud)
我怎么能做到这一点?提前致谢.
我正在使用 SQL 加载器将我的数据加载到数据库中。
在插入数据之前,我需要删除表中的现有数据:
options(skip=1,load=250000,errors=0,ROWS=30000,BINDSIZE=10485760)
load data
infile 'G:1.csv' "str '^_^'"
replace
into table IMPORT_ABC
fields terminated by "," OPTIONALLY ENCLOSED BY '"'
trailing nullcols(
.
.
.
.)
Run Code Online (Sandbox Code Playgroud)
但我得到了如下错误:
SQL*LOADER-926:对表 IMPORT_ABC 执行删除/截断时发生 OCI 错误 ORA-30036:无法在撤消表空间“undo1”中将段扩展 8
如何删除数据,例如 10000 行?我知道我的数据库有一些限制。
我的csv文件有"2009年9月17日上午11:06:06"作为COMPLETED_ON变量
我正在使用sql loader将数据加载到oracle,如下所示:
LOAD DATA
INFILE 'c:/load/file_name.csv'
APPEND
INTO TABLE tbl_name
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(
COMPLETED_ON DATE "not sure what to put here",
)
Run Code Online (Sandbox Code Playgroud)
在oracle中我创建了如下列:
具有本地时区的"COMPLETED_ON"TIMESTAMP(0)
如何在控制文件中更改COMPLETED_ON日期?
我正在使用SQL LOADER在一个表中加载多个csv文件.我发现的过程非常简单
LOAD
DATA
INFILE '/path/file1.csv'
INFILE '/path/file2.csv'
INFILE '/path/file3.csv'
INFILE '/path/file4.csv'
APPEND INTO TABLE TBL_DATA_FILE
EVALUATE CHECK_CONSTRAINTS
REENABLE DISABLED_CONSTRAINTS
EXCEPTIONS EXCEPTION_TABLE
FIELDS TERMINATED BY ","
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
COL0,
COL1,
COL2,
COL3,
COL4
)
Run Code Online (Sandbox Code Playgroud)
但是如果我有超过1000个文件,我不想多次使用INFILE,那么我必须在控制文件脚本中提到1000次INFILE.
所以我的问题是:是否有任何其他方式(如任何循环/任何*.csv)加载多个文件而不使用多个infile?
谢谢,Bithun
尝试使用¥分隔符加载UTF-8文件时,它在找到字符时不会分隔字段.我们从超过列大小的值中得到ORA-12899错误,因为它试图将整行放入第一列.
在UTF-8中,¥是¥(C2A5),但似乎它试图找到C2C2A5.
数据库设置是
NLS_LANGUAGE SPANISH
NLS_TERRITORY SPAIN
NLS_CURRENCY ?
NLS_ISO_CURRENCY SPAIN
NLS_NUMERIC_CHARACTERS ,.
NLS_CHARACTERSET WE8ISO8859P15
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD/MM/RR
NLS_DATE_LANGUAGE SPANISH
NLS_SORT SPANISH
NLS_TIME_FORMAT HH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT DD/MM/RR HH24:MI:SSXFF
NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
NLS_TIMESTAMP_TZ_FORMAT DD/MM/RR HH24:MI:SSXFF TZR
NLS_DUAL_CURRENCY ?
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_RDBMS_VERSION 11.2.0.3.0
Run Code Online (Sandbox Code Playgroud)
我们尝试过:
NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
NLS_LANG=SPANISH_SPAIN.WE8MSWIN1252
Run Code Online (Sandbox Code Playgroud)
我们从具有西班牙语语言环境的Windows 7计算机上的命令窗口运行SQL*Loader.
控制文件:
LOAD DATA
CHARACTERSET UTF8
INFILE 'C:\tmp\xxxy.txt'
BADFILE 'C:\tmp\xxxy.bad'
TRUNCATE INTO TABLE SAMPLE.TEST_CAR_VENCIMI_INTERMED
fields terminated by "¥"
TRAILING NULLCOLS
(
CODE CHAR …Run Code Online (Sandbox Code Playgroud) 我正在尝试将XML文件加载到oracle 11g中的XMLTYPE clob中.到目前为止,我想出了这个控制文件:
LOAD DATA
INFILE 'stocknotify.xml'
append INTO TABLE order_input
(
xml LOBFILE(CONSTANT 'stocknotify.xml') TERMINATED BY EOF
)
Run Code Online (Sandbox Code Playgroud)
这个控制文件工作得很好,除了它加载XML文件7次.我想这是因为XML文件由7行组成,但是,我不知道如何阻止sql loader执行并只加载文件一次.
有任何想法吗?
oracle ×10
sql-loader ×10
sql ×3
delimiter ×1
ide ×1
oracle11gr2 ×1
performance ×1
to-date ×1
truncate ×1
utf-8 ×1
xml ×1