Сброс последовательности (в этом случае удаление и повторное создание) не влияет на данные, которые уже существуют в таблице.Между последовательностью и таблицей нет реальной связи, кроме как через ваш код.(Вы можете использовать одну и ту же последовательность для нескольких таблиц, например).Это не будет правдой, если вы используете столбец идентификаторов в 12c +;но вы не в своем примере.
На самом деле вы сделали следующее:
create sequence bill_tos_seq;
insert into bill_tos_sr (bill_to_no, ...) values (bill_tos_seq.nextval, ...);
drop sequence bill_tos_seq;
create sequence bill_tos_seq;
insert into bill_tos_sr (bill_to_no, ...) values (bill_tos_seq.nextval, ...);
Если не указано иное, обе версии последовательности будут начинаться с 1, что означаетиз ваших вставок будет пытаться создать строку с bill_to_no
, установленным в 1, что нарушает ограничение.
Вам нужно удалить данные из таблицы, прежде чем пытаться ее повторно вставить.Если он был пуст для начала, то вы можете сделать простое усечение или удалить (будьте осторожны, конечно!).
create sequence bill_tos_seq;
insert into bill_tos_sr (bill_to_no, ...) values (bill_tos_seq.nextval, ...);
drop sequence bill_tos_seq;
truncate table bill_tos_sr;
create sequence bill_tos_seq;
insert into bill_tos_sr (bill_to_no, ...) values (bill_tos_seq.nextval, ...);
Если у него уже были какие-то данные до того, как вы начали, вам нужно будет определитьиз строк, которые вы вставили в первый раз, и удалите только те.
Вы могли бы также протестировать и повторно запустить его с откатом:
create sequence bill_tos_seq;
insert into bill_tos_sr (bill_to_no, ...) values (bill_tos_seq.nextval, ...);
rollback;
drop sequence bill_tos_seq;
create sequence bill_tos_seq;
insert into bill_tos_sr (bill_to_no, ...) values (bill_tos_seq.nextval, ...);
Обратите внимание, что если вы это сделаете, это будетдолжно быть до удаления / создания последовательности, потому что DDL фиксирует неявно;поэтому откат впоследствии не будет иметь никакого эффекта.
Возможно, вы откатились не в ту точку или вообще не откатились и не поняли, что данные были зафиксированы по какой-то другой причине -возможно, вы вышли из SQL * Plus и не поняли, что это будет происходить по умолчанию.После того, как данные были зафиксированы, вы должны удалить их, прежде чем сможете повторно вставить их, или вы по-прежнему будете получать нарушения ограничений.
Однако это не имеет ничего общего с буферизацией вывода.