Chinaunix
标题:
oracle 11g 中能用sqlldr 同时装载一条记录到二个有约束的表中?
[打印本页]
作者:
alihoney
时间:
2010-08-02 11:46
标题:
oracle 11g 中能用sqlldr 同时装载一条记录到二个有约束的表中?
oracle 11g 中能用sqlldr 同时装载一条记录到二个有约束的表中,如
二表:
CREATE TABLE "SCOTT"."TESTSQLLDRA"
( "TESTSQLLDR" CHAR(10),
"TESTSQLLDRNO" NUMBER,
CONSTRAINT "TESTSQLLDRPK" PRIMARY KEY ("TESTSQLLDRNO"));
CREATE TABLE "SCOTT"."TESTSQLLDRB"
( "TESTSQLLDRNAME" CHAR(10),
"TESTSQLLDRNO" NUMBER,
CONSTRAINT "TESTSQLLDRBPK" PRIMARY KEY ("TESTSQLLDRNO"),
CONSTRAINT "TESTSQLLDRBFK" FOREIGN KEY ("TESTSQLLDRNO")
REFERENCES "SCOTT"."TESTSQLLDRA" ("TESTSQLLDRNO") ENABLE);
要装载的数据格式:
123,aaa,bbb,
要将123和aaa导到 TESTSQLLDRA, 123和bbb 导到TESTSQLLDRB,要求是这条记录要么同时成功插入二表要么同时失败。
请教各位大虾。。。。
本文来自CSDN博客,转载请标明出处:
http://blog.csdn.net/alihoney/archive/2010/08/02/5781997.aspx
作者:
renxiao2003
时间:
2010-08-02 13:04
LOAD DATA
INFILE 'aa.txt'
INTO TABLE testsqlldra
FIELDS TERMINATED BY ','
(
testsqlldrno position(1:3),
testsqlldr position(5:7)
)
INTO TABLE testsqlldrb
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(
testsqlldrno position(1:3),
testsqlldrname position(9:11)
)
复制代码
这样就可以导入了。但是如果你的每行的值的长度不固定,就不能用这个。
目前长度不固定的我还没有找到方法。
作者:
duolanshizhe
时间:
2010-08-02 13:14
好
作者:
alihoney
时间:
2010-08-03 10:07
谢谢2楼的你!!!用position是可以做到定长的。因为数据文件每行的值的长度不固定,所以才发贴。。。
作者:
renxiao2003
时间:
2010-08-03 14:23
不定长的暂时没有好的解决办法。不定长的要实现当第一个表导完后,指针自动回到行首。如果这点能解决,那就比较简单了。
作者:
alihoney
时间:
2010-08-06 12:02
能不能用when子句和terminated by $来使指针自动回到行首?
作者:
renxiao2003
时间:
2010-08-06 12:07
terminated by $就是按字段导入,字段自动后移啊。
作者:
renxiao2003
时间:
2010-08-06 13:23
回复
4#
alihoney
如果数据不定长,解决方法如下(控制文件内容):
LOAD DATA
INFILE 'aa.txt'
INTO TABLE testsqlldra
FIELDS TERMINATED BY ','
(
testsqlldrno ,
testsqlldr
)
INTO TABLE testsqlldrb
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(
testsqlldrno position(1),
b_filler filler,
testsqlldrname
)
复制代码
注意第二个表的第一个字段后的position(1),就是指明从第一个字符位置开始。
参照了:
http://ms.itpub.net/redirect.php ... amp;goto=nextnewset
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2