我对SQL*Loader的传统路径的理解是它只是生成INSERT语句并将它们发送到数据库.使用它是否有任何性能优势,而不仅仅是以编程方式生成SQL语句并对数据库执行它们?
我通过sql loader将.csv文件数据加载到oracle表中.其中一个字段的数据中有一个换行符(CRLF),因此得到以下错误:
第二个外壳字符串不存在
这是我的控制文件
load data
characterset UTF8
infile 'C:\Users\lab.csv'
truncate
into table test_labinal
fields terminated by ";" optionally enclosed by '"'
TRAILING NULLCOLS
(
STATEMENT_STATUS ,
MANDATORY_TASK ,
COMMENTS CHAR(9999) "SubStr(:Comments, 0, 1000)"
)
Run Code Online (Sandbox Code Playgroud)
字段COMMENTS在其中一个记录中有一个新的行字符.任何人都可以为此提出解决方案.
谢谢
当我尝试将数据插入varchar2(4000)表中的一列大小时,出现错误"Field in data file exceeds maximum length"。
数据=
1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,31,33,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,111,112,121,654,666,667,1001,1100,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1123,1124,1211,2001,2002,2003,2004,2028,2101,2102,2201,2202,2301,2302,2303,2401,2402,3001,3002,3003,3004,3010,3011,3012,3013,3020,3021,3022,3023,3024,3025,3030,3031,3032,3040,3041,3042,3043,3044,3045,3046,3047,3050,3051,3052,3053,3054,3055,3060,3061,3062,3070,3071,3072,3080,3081,3082,3083,3084,3090,3091,3092,3100,3102,3103,3110,3111,3112,3113,3120,3121,3122,3123,3130,3131,3132,5656,8040,9000`
Run Code Online (Sandbox Code Playgroud)
请帮助我解决此错误。
控制文件:
LOAD DATA
INFILE '$IN_DIR/$FILENAME'
BADFILE '$REJ_DIR/$FILENAME.bad'
APPEND
INTO TABLE test
FIELDS TERMINATED BY ","
TRAILING NULLCOLS
(
FILE_RECORD_DESCRIPTOR POSITION(1),
LINE_NO FILLER,
DEPT TERMINATED BY "\n",
SEQ_NO CONSTANT "1",
DEPT_NO CONSTANT "0",
STATUS CONSTANT "U",
PROCESS_ID CONSTANT "2"
)
Run Code Online (Sandbox Code Playgroud)
表结构。
CREATE TABLE TEST
(
FILE_RECORD_DESCRIPTOR VARCHAR2(5) NOT NULL,
DEPT VARCHAR2(4000) NOT NULL,
SEQ_NO NUMBER NOT NULL,
DEPT_NO NUMBER(4,0),
STATUS VARCHAR2(10),
ERROR_DETAIL VARCHAR2(3000),
PROCESS_ID NUMBER(8,0)
);
Run Code Online (Sandbox Code Playgroud)
文件: …
在构建过程中,我们运行sqlldr用一些示例数据填充数据库。在sqlldr接触的每个表上,运行sqlldr后,将禁用外键。
根据此Ask Tom帖子:
sqlldr将仅禁用与其他表相关的约束(例如:外键),而不禁用主键。
SQLLDR将仅重新启用IT禁用的约束,而不是您自己创建的约束。
我认为这意味着应该启用我的外键。
我们所有的sqlldr控制文件都与此类似:
options (direct=true, rows=20000)
load data
infile "clinical_code.txt"
append
into table clinical_code
fields terminated by "|"
trailing nullcols
Run Code Online (Sandbox Code Playgroud)
该rows计数有意大于数据文件中的行数,因为如果较小,它将破坏我的主键。
为什么sqlldr不像文档所示暗示那样重新启用我的外键?
如果需要,我可以编写SQL重新启用索引。我想知道为什么会这样。
使用传统的加载路径是一种不错的选择,但是这将使我们的构建过程增加2分钟的时间,如果可能的话,我希望避免这种情况。
我收到错误SQL*Loader -606,这意味着:
SQL*Loader控制文件中的INTO TABLE子句中指定的同义词通过数据库链接指定远程对象.只能在INTO TABLE子句中指定现有本地表的同义词.
有没有什么办法可以使用SQL*Loader插入到远程表中?
我有一个控制文件,loader.ctl,in C:\oracle\product\10.2.0\oradata\orcl.
loader.ctl文件的内容是
load data
infile 'd:\mydata\test.csv'
into table emp1
fields terminated by "," optionally enclosed by '"'
( empno, ename,job,mgr,hiredate,sal,comm,deptno )
Run Code Online (Sandbox Code Playgroud)
emp1 table已存在于数据库中,test.csv中有9条记录
我从sqlldr执行了loader.ctl:

现在,当我检查我的数据库时,我发现没有记录emp1...为什么会这样?提交之后为什么表中没有填充数据?
我正在从家里通过vpn从Oracle SQL Loader加载大文件,他们花了很多时间.当我从工作中加载它们时加载速度要快得多.我正在加载的文件已经在我的工作服务器上了.
所以我的想法是减速是因为为每一行打印的"达到提交点 - 逻辑记录计数".由于必须通过网络发送,因此必须很慢.我用谷歌搜索,但找不到任何方法来打印更少的.尝试添加rows = 5000作为参数,但我仍然得到每行的打印件.
如何打印较少的"达到提交点 - 逻辑记录计数"计数?
谢谢
我有一个excel表格,其格式如下:
Name Address Phone# Age ----- ------- ------ ---- aaa xxx 123... 11 bbb yyy 345... 21
当我导入这个excel时,我有标题(姓名,地址,电话号码,年龄)作为表格的第一行.
我只想要没有标题的数据.
谁能请帮忙.
TA,
NISHANT
我正在运行SQLLDR的脚本中遇到以下错误:
SQL*Loader-522: lfiopn failed for file (/home/abc/test_loader/load/badfiles/TBLLOAD20150520.bad)
Run Code Online (Sandbox Code Playgroud)
据我所知,这是与权限相关的错误,但是我想知道文件夹“ / load”中没有“ badfiles”文件夹。我已经在load文件夹之外定义了badfiles文件夹,但是为什么在错误中是采取这个位置?就像我的输入文件有问题,SQLLDR试图在提及的位置创建一个错误的文件吗?
下面是SQLLDR命令:
$SQLLDR $LOADER_USER/$USER_PWD@$LOADER_HOSTNAME control=$CTLFDIR/CTL_FILE.ctl BAD=$BADFDIR/$BADFILE$TABLE_NAME ERRORS=
0 DIRECT=TRUE PARALLEL=TRUE LOG=$LOGDIR/$TABLE_NAME$LOGFILE &
Run Code Online (Sandbox Code Playgroud)
以下是控制文件temp:
LOAD DATA
INFILE '/home/abc/test_loader/load/FILENAME_20150417_001.csv' "STR '\n'"
APPEND
INTO TABLE STAGING.TAB_NAME
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(
COBDATE,
--
--
--
FUTUSE30 TERMINATED BY WHITESPACE
)
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用SQL Loader从csv文件加载我的表中的数据.
<--- load.sh - >
ORACLE_HOME=/oracle/OraHome11g
export ORACLE_HOME
PATH=/oracle/OraHome11g/bin
export PATH
$ORACLE_HOME/bin/lsnrctl start
sqlldr RETAIL_FIN/RETAIL_FIN$123@ERDEV control=LBR.ctl
Run Code Online (Sandbox Code Playgroud)
<--- load.ctl - >
load data
infile '/home/tclfin/LBR.ctl'
into table LOAN_BALANCE_MASTER_INT
fields terminated by ',' optionally enclosed by '"'
(ACCOUNT_NO,CUSTOMER_NAME,LIMIT)
Run Code Online (Sandbox Code Playgroud)
执行脚本后,我收到以下错误:
LSNRCTL for IBM/AIX RISC System/6000: Version 11.2.0.2.0 - Production on 27-MAY-2016 16:14:34
Copyright (c) 1991, 2010, Oracle. All rights reserved.
TNS-01106: Listener using listener name LISTENER has already been started
SQL*Loader: Release 11.2.0.2.0 - Production on Fri May 27 16:14:34 2016
Copyright …Run Code Online (Sandbox Code Playgroud) sql-loader ×10
oracle ×9
sql ×3
oracle10g ×2
unix ×2
bash ×1
bulkinsert ×1
loader ×1
oracle11g ×1
shell ×1