Последовательность отката

#oracle10g #sequence

#oracle10g #последовательность

Вопрос:

У меня есть таблица, в которой первичный ключ заполняется с использованием последовательности. Текущая версия:

 CREATE SEQUENCE xxxx.SEQ_xyz
START WITH 135
MAXVALUE 999999999999999999999999999
MINVALUE 1
NOCYCLE
NOCACHE
ORDER;
  

Существует приложение, которое удаляет некоторые строки из таблицы. Когда это произойдет, я хочу получить следующий доступный номер вместо того, что показывает последовательность. Допустим, я вставляю:
136 x
137 y
138 z

итак, последовательность теперь равна 139. если я удалю 136, 137, 138, я хочу, чтобы последовательность вернулась к 136 вместо того, чтобы оставаться на 139. Возможно ли это?

заранее благодарю.

Комментарии:

1. Что, если вы удалили только 136 и 137, но 138 все еще существует? Что, если вы удалите 136, 137, 138, а другой процесс вставил 140, но не зафиксирован, поэтому вы не можете видеть, что 140 существует?

Ответ №1:

Ответ на ваш вопрос заключается в том, чтобы написать перед удалением в каждой строке триггер, который заменил бы последовательность на «начать с» записи, которая будет удалена. Но это создаст множество проблем, как упоминал Шеннон Северанс. например, 136 удаляется, триггер заменяет старую последовательность, теперь последовательность начинается с 136. вы сможете вставить что-либо с первичным ключом как 136, но в следующий раз, когда вы попытаетесь вставить данные в таблицу, вы не сможете вставить это, поскольку это нарушит ограничение первичного ключа (в таблице будут присутствовать 137, 138)

Я не вижу никаких причин, по которым вам нужно вернуться к ранее удаленному no. в вашей последовательности. Не могли бы вы подробнее остановиться на этом?

Комментарии:

1. Это принесет больше вреда, чем пользы, поэтому я оставлю все как есть. Спасибо