日期:2014-05-17  浏览次数:20936 次

ORA 00001 违反唯一约束条件,100分求解决~~!!急~!
现在情况是这样的,我们医院有四个药房,西药房现在前台卖药出单剩下三个药房没事,而且这4个药房的记录都存在一个表中,记录无法入库~!报的错误是ORA 00001
违反了主键的唯一约束,主键在RECORD_ID这个字段上,前台下单,应该是往这张表中写入一个insert操作(这个insert语句怎么也抓不到),在record_ID这个字段上用序列插入,我怀疑是不是这个序列出了问题?还是什么别的问题?哪位高手能解答一下?在下先谢过~~很急,西药房那边整个瘫痪了。。
唯一约束,序列

------解决方案--------------------
看下序列的当前值是多少? 然后看它的下一个值 是否存在表中,。。
------解决方案--------------------
如果主键就是这个record_id的话,那就是这个序列的问题。
------解决方案--------------------
问题不是很复杂,楼主镇定点。
按楼上所说,先检查表中的最大主键值,再检查序列值,再调整序列。
不是多大的问题,关键是保持清醒头脑
------解决方案--------------------
引用:
Quote: 引用:

问题不是很复杂,楼主镇定点。
按楼上所说,先检查表中的最大主键值,再检查序列值,再调整序列。
不是多大的问题,关键是保持清醒头脑
谢谢~~能说下调整序列的语法吗?就是怎么把序列值变大? select 序列名.nextval from dual;这样行吗?


取一个当前的seq的值看是否已经存在于表中
select seq.nextval from dual;
如果已经存在,找到已经存在的最大的seq值比如maxSeq
然后用maxseq - seq.nextval  找到相差的数目,比如两个相差100

然后
declare
  n_loop number(10);
begin
  for i in 0..100 loop
    select seq.nextval into n_loop from dual;
  end loop;
end
目的是让下一个seq不会再产生冲突

另外,你需要检查是什么导致了这个问题的产生,是因为缓冲池被重置或者是什么其他的原因.
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

问题不是很复杂,楼主镇定点。
按楼上所说,先检查表中的最大主键值,再检查序列值,再调整序列。
不是多大的问题,关键是保持清醒头脑
谢谢~~能说下调整序列的语法吗?就是怎么把序列值变大? select 序列名.nextval from dual;这样行吗?


取一个当前的seq的值看是否已经存在于表中
select seq.nextval from dual;
如果已经存在,找到已经存在的最大的seq值比如maxSeq
然后用maxseq - seq.nextval  找到相差的数目,比如两个相差100

然后
declare
  n_loop number(10);
begin
  for i in 0..100 loop
    select seq.nextval into n_loop from dual;
  end loop;
end
目的是让下一个seq不会再产生冲突

另外,你需要检查是什么导致了这个问题的产生,是因为缓冲池被重置或者是什么其他的原因.
问题是我现在不能确定它用的是哪个序列查去的....我从V$sqlarea 里抓不出来哪个插入的sql,所以确定不了是用的哪个sequence,怎么办


不能确定它用的哪个序列? 这个...不科学.
也可能不是seq 可能是 max(id)+1
------解决方案--------------------



引用:
我这个表所在的用户下有3个序列,我不能确定用的那个序列先在,而且insert的sql抓不到


引用:
问题是我现在不能确定它用的是哪个序列查去的....我从V$sqlarea 里抓不出来哪个插入的sql,所以确定不了是用的哪个sequence,怎么办