Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Уникальный номер в течении дня / 25 сообщений из 66, страница 1 из 3
03.09.2018, 08:33
    #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
03.09.2018, 08:52
    #39696987
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальный номер в течении дня
Morra,

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

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

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

unique constraint
...
Рейтинг: 0 / 0
03.09.2018, 11:27
    #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
03.09.2018, 11:39
    #39697084
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальный номер в течении дня
feagorВ конце дняЭто когда конкретно?
...
Рейтинг: 0 / 0
03.09.2018, 12:58
    #39697137
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальный номер в течении дня
MorraЧто посоветуете?

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

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

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

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


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

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

Да, первое сентября со мной случилось.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
03.09.2018, 14:46
    #39697220
SY
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
03.09.2018, 18:06
    #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
03.09.2018, 18:06
    #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
03.09.2018, 18:20
    #39697327
SkilledJunior
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальный номер в течении дня
Есть очень большое подозрение, что в электронной очереди номера должны выдаваться последовательно без пропусков, sequence не обеспечит непрерывность.
...
Рейтинг: 0 / 0
03.09.2018, 18:24
    #39697329
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальный номер в течении дня
SkilledJuniorЕсть очень большое подозрение, что в электронной очереди номера должны выдаваться последовательно без пропусков, sequence не обеспечит непрерывность.

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

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

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

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

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

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

SY.
...
Рейтинг: 0 / 0
03.09.2018, 19:18
    #39697364
SY
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
03.09.2018, 19:23
    #39697365
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальный номер в течении дня
Staxя б так не делал


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

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


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