powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Уникальный номер в течении дня
25 сообщений из 66, страница 1 из 3
Уникальный номер в течении дня
    #39696981
Morra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Есть электронная очередь, в течении дня номер каждой записи должен быть уникален, следующий присваивается максимальный +1, если запись удалена, её номер больше не используется.
Например, я вставляю запись таким запросом:
Код: plsql
1.
2.
3.
INSERT INTO TURN (NM_TURN, D_ACT, TITLE) VALUES
 ((select case when max(nm_turn) is null then 1 else max(nm_turn)+1 end from turn
where trunc(d_act) = trunc(sysdate)), sysdate, 'Б') 



И если я параллельно с коллегой в жабе выполняю этот запрос, 50% записей получают один номер. То есть, если мы жмём кнопку в одну секунду, номер дублируется.

Я пробовала вешать триггер на это поле, но ситуация не изменилась.

Что посоветуете?
...
Рейтинг: 0 / 0
Уникальный номер в течении дня
    #39696987
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Morra,

если версия древняя - sequence

в 12 и выше "автономер"

.....
stax
...
Рейтинг: 0 / 0
Уникальный номер в течении дня
    #39696988
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Morra,

unique constraint
...
Рейтинг: 0 / 0
Уникальный номер в течении дня
    #39697078
feagor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Morra,

обычный sequence
Код: plsql
1.
2.
3.
4.
5.
CREATE SEQUENCE my_seq
 START WITH     1
 INCREMENT BY   1
 MAXVALUE  4000
 CYCLE;



Код: plsql
1.
select my_seq.nextval from dual; 



В конце дня джобом прогоняете до последнего значения и на сл.день у вас снова счётчик начинается заново
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
 declare
 i int;
 begin
   loop
   i:= my_seq.nextval;
   exit when i=4000;
   end loop;
 end; 
...
Рейтинг: 0 / 0
Уникальный номер в течении дня
    #39697084
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feagorВ конце дняЭто когда конкретно?
...
Рейтинг: 0 / 0
Уникальный номер в течении дня
    #39697137
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MorraЧто посоветуете?

Забудь про таблицу, используй пакетную переменную.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Уникальный номер в течении дня
    #39697138
Sheldon Cooper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovMorraЧто посоветуете?

Забудь про таблицу, используй пакетную переменную.

В дырочку
...
Рейтинг: 0 / 0
Уникальный номер в течении дня
    #39697139
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

есть регламентная процедура, так и називается закрытие дня


ps
счетчик я б сбрасывал не накруткой, а алтером
....
stax
...
Рейтинг: 0 / 0
Уникальный номер в течении дня
    #39697149
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MorraИ если я параллельно с коллегой в жабе выполняю этот запрос, 50% записей получают один
номер. То есть, если мы жмём кнопку в одну секунду, номер дублируется.

Изучайте транзакции. В частности - уровень изоляции SERIZLIZABLE.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Уникальный номер в течении дня
    #39697180
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovиспользуй пакетную переменную.Получать нумерацию с 1 в каждой новой сессии несколько хуже, чем дубли при одновременном выполнении.
Dimitry SibiryakovИзучайте транзакции. В частности - уровень изоляции SERIZLIZABLE.Не поможет.
...
Рейтинг: 0 / 0
Уникальный номер в течении дня
    #39697188
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxесть регламентная процедура, так и називается закрытие дняДумаешь, он тоже кулик и в таком же болоте?
...
Рейтинг: 0 / 0
Уникальный номер в течении дня
    #39697194
SkilledJunior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Morraследующий присваивается максимальный +1
Непрерывность присваиваемых номеров обязательна?
...
Рейтинг: 0 / 0
Уникальный номер в течении дня
    #39697198
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Dimitry Sibiryakovиспользуй пакетную переменную.Получать нумерацию с 1 в каждой новой сессии несколько хуже, чем дубли при одновременном выполнении.
Dimitry SibiryakovИзучайте транзакции. В частности - уровень изоляции SERIZLIZABLE.Не поможет.Может Дмитрия взломали?
...
Рейтинг: 0 / 0
Уникальный номер в течении дня
    #39697204
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadМожет Дмитрия взломали?

Да, первое сентября со мной случилось.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Уникальный номер в течении дня
    #39697220
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxсчетчик я б сбрасывал не накруткой, а алтером


Создаем последовательности SEQ_YYYYMMDD на остаток текущего года. Создаем job который выполнятся раз в год (e.g. 15 Декабря) и создает последовательности SEQ_YYYYMMDD на весь следующий год. В BEFORE INSERT триггере:

Код: plsql
1.
2.
EXECUTE IMMEDIATE TO_CHAR(SYSDATE,'"SELECT SEQ_"YYYYMMDD".NEXTVAL FROM DUAL"')
  INTO :NEW.ID;



SY.
...
Рейтинг: 0 / 0
Уникальный номер в течении дня
    #39697322
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYStaxсчетчик я б сбрасывал не накруткой, а алтером


Создаем последовательности SEQ_YYYYMMDD на остаток текущего года. Создаем job который выполнятся раз в год (e.g. 15 Декабря) и создает последовательности SEQ_YYYYMMDD на весь следующий год. В BEFORE INSERT триггере:

Код: plsql
1.
2.
EXECUTE IMMEDIATE TO_CHAR(SYSDATE,'"SELECT SEQ_"YYYYMMDD".NEXTVAL FROM DUAL"')
  INTO :NEW.ID;



SY.

я б так не делал

.....
stax
...
Рейтинг: 0 / 0
Уникальный номер в течении дня
    #39697323
XMLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
Код: plsql
1.
2.
EXECUTE IMMEDIATE TO_CHAR(SYSDATE,'"SELECT SEQ_"YYYYMMDD".NEXTVAL FROM DUAL"')
  INTO :NEW.ID;



SY.

Без даты значение сиквенса бессмысленно, так что trunc(sysdate) как out нужен
...
Рейтинг: 0 / 0
Уникальный номер в течении дня
    #39697327
SkilledJunior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть очень большое подозрение, что в электронной очереди номера должны выдаваться последовательно без пропусков, sequence не обеспечит непрерывность.
...
Рейтинг: 0 / 0
Уникальный номер в течении дня
    #39697329
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SkilledJuniorЕсть очень большое подозрение, что в электронной очереди номера должны выдаваться последовательно без пропусков, sequence не обеспечит непрерывность.

В реальной очереди "талончики" сложнее

.....
stax
...
Рейтинг: 0 / 0
Уникальный номер в течении дня
    #39697332
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SkilledJuniorв электронной очереди номера должны выдаваться последовательно без пропусков

Почему? Что плохого случится, если за 58-м номером из автомата вылезет 60-й? И чем это
отличается от случая, когда человек нажал кнопку дважды и выбросил 59-й номер в мусорку?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Уникальный номер в течении дня
    #39697338
SkilledJunior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Плохого ничего, просто вопрос почему так происходит будет следующим от Morra ...
...
Рейтинг: 0 / 0
Уникальный номер в течении дня
    #39697350
-gt-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так как требуется согласованный конкурентный доступ, то и пользоваться нужно механизмами обеспечивающими такой доступ.

Например, select ... for update.
...
Рейтинг: 0 / 0
Уникальный номер в течении дня
    #39697357
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XMLerБез даты значение сиквенса бессмысленно, так что trunc(sysdate) как out нужен

То что я прeдлoжил это номер талонa на cегодня. Естсeственно в таблице должно быть/есть поле с дaтой которое определяет это "cегодня". В соокупности они есть PK и говорят "у вас талон на XXX число и вы номер N" .

SY.
...
Рейтинг: 0 / 0
Уникальный номер в течении дня
    #39697364
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И кстати, если предусматривается предварительная запись, то job создает для последовательностей SEQ_YYYYMMDD на пeриод предварительной записи и выполняется скажем за месяц до истечения. А триггер:

Код: plsql
1.
2.
EXECUTE IMMEDIATE TO_CHAR(:NEW.APPOINTMENT_DATE,'"SELECT SEQ_"YYYYMMDD".NEXTVAL FROM DUAL"')
  INTO :NEW.ID;



SY.
...
Рейтинг: 0 / 0
Уникальный номер в течении дня
    #39697365
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxя б так не делал


А что смущает?

SY.
...
Рейтинг: 0 / 0
25 сообщений из 66, страница 1 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Уникальный номер в течении дня
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]