ORA 00001 违反唯一约束条件,100分求解决~~!!急~!
现在情况是这样的,我们医院有四个药房,西药房现在前台卖药出单
(剩下三个药房没事,而且这4个药房的记录都存在一个表中
),记录无法入库~!报的错误是
ORA 00001
违反了
主键的唯一约束,主键在RECORD_ID这个字段上,前台下单,应该是往这张表中写入一个insert操作(这个insert语句怎么也抓不到),在record_ID这个字段上用序列插入,我怀疑是不是这个序列出了问题?还是什么别的问题?哪位高手能解答一下?在下先谢过~~
很急,西药房那边整个瘫痪了。。
------解决方案--------------------看下序列的当前值是多少? 然后看它的下一个值 是否存在表中,。。
------解决方案--------------------如果主键就是这个record_id的话,那就是这个序列的问题。
------解决方案--------------------问题不是很复杂,楼主镇定点。
按楼上所说,先检查表中的最大主键值,再检查序列值,再调整序列。
不是多大的问题,关键是保持清醒头脑
------解决方案--------------------
取一个当前的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不会再产生冲突
另外,你需要检查是什么导致了这个问题的产生,是因为缓冲池被重置或者是什么其他的原因.
------解决方案--------------------
问题不是很复杂,楼主镇定点。
按楼上所说,先检查表中的最大主键值,再检查序列值,再调整序列。
不是多大的问题,关键是保持清醒头脑
谢谢~~能说下调整序列的语法吗?就是怎么把序列值变大? 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,怎么办