|
|
|
Уникальный номер в течении дня
|
|||
|---|---|---|---|
|
#18+
SYStaxя б так не делал А что смущает?Табличка в два поля и одну строку и функция nextВал позволит то же самое, но без джобов и регулярных дроп креате. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 22:20 |
|
||
|
Уникальный номер в течении дня
|
|||
|---|---|---|---|
|
#18+
-2-, Строка в табличке будет не одна, на каждую дату нужна новая строка. Но самое главное при таком подходе получение номеров возможно только последовательно, пока первый пользователь получивший номер не завершил транзакцию другой не сможет получить номер, может быть именно так и должно быть, а может быть будет приличный затык, поскольку мы не знаем условий задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2018, 00:51 |
|
||
|
Уникальный номер в течении дня
|
|||
|---|---|---|---|
|
#18+
Спасибо большое всем за отзывчивость, не ожидала столько ответов. Версия оракла 11. Номера должны идти по порядку, так как сотрудники ориентируются на это количество, смотря на экран. Но при этом ничего страшного, если талон отменят, либо человек уйдёт и не станет ждать своей очереди и этот талон просто "пропадёт", наоборот, такой вариант предпочтительнее, чтобы сотрудники не напрягались, когда за 100 вдруг идёт 10. Такое бывает примерно 3-4 талона в день. События "конец дня" нет, есть время работы организации. Не совсем поняла, что предлагается. Чтобы каждый день, например, в 6:00 запускалась работа по сбросу счётчика? Одновременная выдача талончика маловероятна, выдают два оператора активно и два время от времени (всего 4), но вот это случилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2018, 05:20 |
|
||
|
Уникальный номер в течении дня
|
|||
|---|---|---|---|
|
#18+
feagorMorra, обычный sequence Код: plsql 1. 2. 3. 4. 5. Код: plsql 1. В конце дня джобом прогоняете до последнего значения и на сл.день у вас снова счётчик начинается заново Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. Протестировала, всё отлично работает, задвоений нет, под мои условия подходит. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2018, 06:51 |
|
||
|
Уникальный номер в течении дня
|
|||
|---|---|---|---|
|
#18+
SkilledJuniorНо самое главное при таком подходе получение номеров возможно только последовательно, пока первый пользователь получивший номер не завершил транзакцию другой не сможет получить номерТы не слышал про автономные транзакции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2018, 07:29 |
|
||
|
Уникальный номер в течении дня
|
|||
|---|---|---|---|
|
#18+
MorraПротестировала, всё отлично работает, задвоений нет, под мои условия подходит. Спасибо!Когда-нибудь ты узнаешь, сколько открытий чудных готовит тебе этот быдлокод. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2018, 07:31 |
|
||
|
Уникальный номер в течении дня
|
|||
|---|---|---|---|
|
#18+
SkilledJuniorпоскольку мы не знаем условий задачиСколько бы пациент "электронной очереди" не ковырялся в носу, формирование номера это апдейт и коммит в одном флаконе. SkilledJuniorСтрока в табличке будет не одна, на каждую дату нужна новая строка.Достаточно одной. Несколько строк это те же яйца сиквенсы Соломона, то есть навставлять строк заранее. Либо разруливать конкурентную вставку самим рабочим процессом. Но тогда вспомогательная таблица не нужна. Такую конкурентную вставку применить к исходной таблице автора. Для этого задать уникальность и повтор по dup_val_on_index. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2018, 08:24 |
|
||
|
Уникальный номер в течении дня
|
|||
|---|---|---|---|
|
#18+
SYStaxя б так не делал А что смущает? SY. я б заводил табличку с дата,...,номер и в автономке палил (выдавал) номера в нас реально работает очередь, таланчики выдает автоматы(киоски) и возможно менеджер "очереди" главная задача чтоб было меньше скандалов, почему я жду, а соседа обслужили дырки ето обычная практика, два раза нажал кнопку на екране, взял талончик и ушел, не на ту услугу записался, и моя головная боль зажевало термобумагу и тд ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2018, 09:07 |
|
||
|
Уникальный номер в течении дня
|
|||
|---|---|---|---|
|
#18+
[quot Elic]SkilledJuniorТы не слышал про автономные транзакции? Не слышал чтобы они позволяли изменять один и тот же ресурс одновременно двумя сеансами, все равно обработка становится последовательной, а в данном случае транзакции и так короткие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2018, 11:51 |
|
||
|
Уникальный номер в течении дня
|
|||
|---|---|---|---|
|
#18+
Staxя б заводил табличку с дата,...,номер и в автономке палил (выдавал) номера в нас реально работает очередь, таланчики выдает автоматы(киоски) и возможно менеджер "очереди" главная задача чтоб было меньше скандалов, почему я жду, а соседа обслужили stax Тогда уж лучше по классике, создаем табличку ресурсов, создаем табличку ресурс-дата-номер, для выдачи номера выполняем select ... for update ресурса из таблички ресурсов, запрашиваем для этого ресурса текущий номер, если номер на дату есть то +1 и update, если нет то номер равен 1 и insert. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2018, 13:07 |
|
||
|
Уникальный номер в течении дня
|
|||
|---|---|---|---|
|
#18+
Табличка vs sequence - тема IMHO такая-же как Windows vs Linux. В OeBS нумераторы (в пределах года) сделаны на сиквенсах AFAIK. Многие жалуются, многие плюются, но кактус вполне съедобный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2018, 13:24 |
|
||
|
Уникальный номер в течении дня
|
|||
|---|---|---|---|
|
#18+
SkilledJuniorпо классикеВо-первых, селект тут ни на что не влияет, кроме увеличении времени транзакции. Во-вторых, не защищает от дублей. Фактически, это вариант изложенный автором, отягощенный вспомогательным "ресурсом". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2018, 13:26 |
|
||
|
Уникальный номер в течении дня
|
|||
|---|---|---|---|
|
#18+
SkilledJunior по классике , создаем табличку ресурсов, создаем табличку ресурс-дата-номер, для выдачи номера выполняем select ... for update ресурса из таблички ресурсов, запрашиваем для этого ресурса текущий номер, если номер на дату есть то +1 и update Вопрос по Sequence ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2018, 13:40 |
|
||
|
Уникальный номер в течении дня
|
|||
|---|---|---|---|
|
#18+
-2-SkilledJuniorпо классикеВо-первых, селект тут ни на что не влияет, кроме увеличении времени транзакции. Во-вторых, не защищает от дублей. Фактически, это вариант изложенный автором, отягощенный вспомогательным "ресурсом". for update влияет. Гарантию отсутствия дублей даст ограничение в виде уникального индекса, я думал что наличие соответствующих ограничений целостности на таблицах само собой разумеется, ошибся ... Если классический алгоритм для вас "отягощен", то это ваш выбор, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2018, 13:49 |
|
||
|
Уникальный номер в течении дня
|
|||
|---|---|---|---|
|
#18+
SkilledJuniorfor update влияетВозможно я не правильно понял изложение. Алгоритм предполагает две вспомогательные таблицы для эмуляции lock table in exclusive mode целевой таблицы? SkilledJuniorГарантию отсутствия дублей даст ограничение в виде уникального индексаЕсли бы был уникальный индекс, вопроса про дубли не возникло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2018, 13:56 |
|
||
|
Уникальный номер в течении дня
|
|||
|---|---|---|---|
|
#18+
-2-SkilledJuniorfor update влияетВозможно я не правильно понял изложение. Алгоритм предполагает две вспомогательные таблицы для эмуляции lock table in exclusive mode целевой таблицы? Да, можно пойти в лоб, заблокировать всю целевую таблицу и найти в ней талончик с максимальным номером на текущую дату, после чего вставить новую запись. Elic streletsПока решил проблему через поле с текущим номером коробки в таблице товаров.В данном случае самое правильное решение. Если получать следующий номер при помощи: Код: plsql 1. 2. , то ни конфликтов, ни дырок не будет. Будет лишь конкуренция в пределах одного товара, которая при грамотном кодировании сводится до незначительных задержек. К тому же на практике такая конкуренция может быть редкой. Естественно, это будет медленнее последовательностей - се ля ви. Так я это и сделал, только товар в моем случае это комбинация ресурса и даты, и эта комбинация может отсутствовать, т.е. нужен не просто update, а upsert. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2018, 14:12 |
|
||
|
Уникальный номер в течении дня
|
|||
|---|---|---|---|
|
#18+
SkilledJuniorТак я это и сделалНет. Ты увидел фигу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2018, 14:32 |
|
||
|
Уникальный номер в течении дня
|
|||
|---|---|---|---|
|
#18+
Я вас очень внимательно читаю. Блокировать целую таблицу для обновления номера проблематично, так как есть ещё 5-6 операторов, которые работают и пишут в таблицу начало и окончание времени работы и номер рабочего места, есть ещё id человека, получившего талон. Таблицу я упростила в начале, так как это было не принципиально. Можно, конечно, разнести на две таблицы, но это надо тогда приложение переписывать, а там много. А если не блокировать, а делать update, то возможно дублирование, которое я и пытаюсь исключить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2018, 07:11 |
|
||
|
Уникальный номер в течении дня
|
|||
|---|---|---|---|
|
#18+
Там разница в 100 милисекунд, а всё равно, задваивается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2018, 07:13 |
|
||
|
Уникальный номер в течении дня
|
|||
|---|---|---|---|
|
#18+
Про уникальный индекс тоже думала, но в таком случае человек, который пытается вставить запись на эти милисекунды позже, получит ошибку. Лучше, конечно, чем задвоение, но тоже не красиво ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2018, 07:15 |
|
||
|
Уникальный номер в течении дня
|
|||
|---|---|---|---|
|
#18+
MorraПро уникальный индекс тоже думала, но в таком случае человек, который пытается вставить запись на эти милисекунды позже, получит ошибку.Я правильно понял, что для получения талона "человек" выполняет insert в sqlplus'е? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2018, 08:05 |
|
||
|
Уникальный номер в течении дня
|
|||
|---|---|---|---|
|
#18+
-2-, не совсем вас поняла. Через приложение на vb.net insert'ы, но тестирую запросы я в Toad, это вроде SQL/PL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2018, 08:22 |
|
||
|
Уникальный номер в течении дня
|
|||
|---|---|---|---|
|
#18+
MorraБлокировать целую таблицу для обновления номера проблематично, так как есть ещё 5-6 операторов, которые работают и пишут в таблицу начало и окончание времени работы и номер рабочего места, есть ещё id человека, получившего талон. При времени выполнения операции с таблицей в районе 100 миллисекунд, эти 5-6 человек обработаются за полсекунды. Для Явы такое время реакции в приделах нормы. Так в чём проблема-то? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2018, 12:32 |
|
||
|
Уникальный номер в течении дня
|
|||
|---|---|---|---|
|
#18+
Создаете таблицу с семафорами eq_resources с полем res_name, в таблицу вставляется одна запись со значением TURN, создаете вторую таблицу eq_numbers с полями res_name, d_act, nm_turn, на нее вешаем внешний ключ на eq_resources поле res_name и ограничение уникальности по полям res_name, d_act. Таким образом последний выданный на определенный день номер будет храниться в поле nm_turn. Далее пишите хранимую процедуру выдачи номера, чтобы долго не держать семафор занятым процедура должна выполняться как автономная транзакция: 1. Захватываем семафор select ... from eq_resources where res_name = 'TURN' FOR UPDATE 2. Находим последний выданный номер в таблице eq_numbers 3. Если номер найден то номер+1 и update таблицы eq_numbers, если не найден то номер равен 1 и insert в eq_numbers 4. Возвращаем в вызывающую программу новый выданный номер. В вызывающей программе сначала получаем новый номер, потом выполняется insert из первого поста темы подставляя в него полученный номер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2018, 13:35 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39697725&tid=1883494]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
154ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
87ms |
get tp. blocked users: |
2ms |
| others: | 242ms |
| total: | 528ms |

| 0 / 0 |
