有谁用过sqlldr,有一个问题请教
为什么我在oracle734中建了一个表like
create table aaa (a char(1),b char(2),c char(3),primary key(b,c));
然后我用sqlldr 插入这么一行 1,2,3
发现可以连续插入两次,第三次就不能插入了
select * from aaa;
发现有两条一样的记录
而且delete不了
这是为什么?????????
问题点数:50、回复次数:19Top
1 楼KingSunSha(弱水三千)回复于 2002-03-29 00:55:42 得分 30
果然?
当真?
不可能吧?表里有怎么样的纪录?Top
2 楼dynku(随风来去.cn)回复于 2002-03-29 08:32:10 得分 0
select 出来如下
a b c
1 2 3
1 2 3Top
3 楼mycode(不写代码)回复于 2002-03-29 08:46:44 得分 0
primary key(b,c)
检查一下,b,c字段的长度,空格在前或在后。
按理说不应该出现这样的数据。Top
4 楼dynku(随风来去.cn)回复于 2002-03-29 08:49:09 得分 0
delete from aaa
*
ERROR at line 1:
ORA-01502: index 'CCS.SYS_C0018012' is in direct load state
Top
5 楼thingsfly(随风)回复于 2002-03-29 09:29:51 得分 20
你先把主键索引SYS_C0018012删除,
然后再添加,或者是重建你的主键索引吧!!
Top
6 楼dynku(随风来去.cn)回复于 2002-03-29 12:38:29 得分 0
对oracle知道太少,:((
可是我不能理解,这两个数据怎么添进去的那?Top
7 楼thingsfly(随风)回复于 2002-03-29 12:52:30 得分 0
这两条数据是ORACLE直接写到数据文件里的。
它没有经过INSERT语句。Top
8 楼Tsiah(网络一次元)回复于 2002-03-29 12:56:26 得分 0
SQLLDR怎么用啊Top
9 楼KingSunSha(弱水三千)回复于 2002-03-29 16:19:16 得分 0
你在用SQLLDR的时候采用了DIRECT LOAD模式,这种模式下为了提高INSERT的速度,会先把INDEX DISABLE,所以1、唯一性检查失效 2、索引还处在DISABLED状态,无法访问
解决方法:
DROP INDEX SYS_C0018012;
DELETE FROM AAA;
...
ALTER TABLE AAA ADD CONSTRAINT ....;Top
10 楼dynku(随风来去.cn)回复于 2002-03-29 17:12:11 得分 0
我drop index 的时候
提示
ORA-02429: cannot drop index used for enforcement of unique/primary key
Top
11 楼dynku(随风来去.cn)回复于 2002-03-29 17:13:05 得分 0
多谢各位指导:)Top
12 楼KingSunSha(弱水三千)回复于 2002-03-29 17:45:57 得分 0
ALTER TABLE AAA DROP PRIMARY KEY MY_KEY;Top
13 楼xinpingf(白开心)回复于 2002-03-29 18:23:33 得分 0
索引是主键上带的,当然不能drop
把主键dropk就行了Top
14 楼dynku(随风来去.cn)回复于 2002-03-30 00:16:23 得分 0
理解
上班了就去试试Top
15 楼dynku(随风来去.cn)回复于 2002-04-01 12:05:17 得分 0
现在把主键drop了
但是再
alter table producer add constraints k_producer primary key(cbicerty,cbicerno)
提示ORA-02437: cannot enable (CCS.K_PRODUCER) - primary key violated
这是为什么那?
这个k_producer 已经被我drop了啊Top
16 楼KingSunSha(弱水三千)回复于 2002-04-01 13:52:06 得分 0
那是因为你的表中有重复纪录,无法通过主键校验,所以你先要删除重复的纪录。其实你例子这么简单,直接把两条纪录删掉就行了。Top
17 楼dynku(随风来去.cn)回复于 2002-04-01 17:10:24 得分 0
呵呵,只是一个简单的例子
实际上的表复杂多了
贴出来费劲点Top
18 楼realcedar(void)回复于 2002-04-01 17:21:19 得分 0
sqlldr用来一条一条插纪录?太浪费了吧!Top
19 楼realcedar(void)回复于 2002-04-01 17:22:03 得分 0
sqlldr用来一条一条插纪录?太浪费了吧!Top
20 楼dynku(随风来去.cn)回复于 2002-04-02 00:34:05 得分 0
作测试么
如果不能检测出重复的
数据多了怎么办Top




