[Oracle] Sequence insert select ORA-00001
Но как это может играть в твоем случае, я не понимаю.
Чего ты хотел своим кодом добиться?
Хочу слить две таблицы в одну. Проблема в том что id`шники пересекаются.
Попробую сначала пересечение id`шников устранить...
Причем при where rownum<20 всё работаетдык, в первых 20-ти записях у тебя дублей нет, а 21-ая строка является дублем одной из предыдущих
Вообще я из сиквенса строчки делаю, они все различны, по крайней мере должны быть. Иначе весь смысл сиквенса теряется.
У тебя в таблице уже есть запись с Id = 21 - поэтому и получаешь ОРУ.
select MESSAGE_TRANSFER_SEQ.CURRVAL from dual;
91824935
select count(*) from table where id>=91824935;
0
update oldschema.table set id=MESSAGE_TRANSFER_SEQ.NEXTVAL;
insert into table select * from oldschema.table;
Но вопрос всё равно открыт.
insert into table (id)странно как-то все
select MESSAGE_TRANSFER_SEQ.NEXTVAL
from oldschema.table where rownum<21;
ORA-00001: unique constraint (schema.pk_table) violated
похоже что 21-я строчка в старой таблице совпадает с одной из 1-20 строчкой, скажем с 15-й
оракл видит что 15 и 21 строчка одинаковые и не вычисляет выражение по новой а использует старое
попытаюсь поподробнее объяснить:
oldschema.table содержит такие данные:
'foo'
'bar'
'foo'
сиквенс начинается с 1
запрос
select MESSAGE_TRANSFER_SEQ.NEXTVAL
from oldschema.table where rownum<21;
вернет
1
2
1
т.е. в третьем случае выражение не посчиталось а взялось предыдущее, т.е. NEXTVAL не сработал
P.S.
это мои догадки
может я и бред написал
Похоже надо патчиться.
select MESSAGE_TRANSFER_SEQ.NEXTVAL
from oldschema.table where rownum<21;
Да и параметры последовательности неплохо бы знать. Вдруг она у тебя циклическая.
На oldschema.table тоже есть первичный ключ -> все записи различны. Да и в теории не должно это влиять...прежде чем патчить, хорошо бы знать, от чего
Похоже надо патчиться.
если прям так уверен, что всё делаешь правильно, то открывай TAR, это самый правильный путь
Оставить комментарий
sinet
select MESSAGE_TRANSFER_SEQ.CURRVAL from dual;91824935
select count(*) from table where id>=91824935;
0
insert into table (id)
select MESSAGE_TRANSFER_SEQ.NEXTVAL
from oldschema.table where rownum<21;
ORA-00001: unique constraint (schema.pk_table) violated
Причем при where rownum<20 всё работает.
Может кто-нибудь уже наступал на эти грабли?
PS Oracle 10.2.0.2