powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Задачка
25 сообщений из 145, страница 2 из 6
Задачка
    #33318812
Sxak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровНу чтож, с такими репликами этот топик скорее всего закроют и автору придется начинать новый

А жаль, задачка интересная
Кстати а по моему вопросу не скажешь ты или Элик? в смысле поможет ли индекс блокировать вставку на другие сессии?
...
Рейтинг: 0 / 0
Задачка
    #33318817
Падонак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при вставке одинаковых уникальных значенй в двух сессиях одна будет заблокирована
...
Рейтинг: 0 / 0
Задачка
    #33318822
Sxak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Падонакпри вставке одинаковых уникальных значенй в двух сессиях одна будет заблокированаПри чем здесь уникальных? Тут же неуникальные надо...
подучись еще маленько прежде чем советы давать
...
Рейтинг: 0 / 0
Задачка
    #33318841
Падонак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sxak Падонакпри вставке одинаковых уникальных значенй в двух сессиях одна будет заблокированаПри чем здесь уникальных? Тут же неуникальные надо...
подучись еще маленько прежде чем советы давать

действительно, ошыбсо
...
Рейтинг: 0 / 0
Задачка
    #33318873
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Падонакдействительно, ошыбсоЧто характерно, это наблюдается в 99 случаях из 100. Взрослый уважающий себя человек уже давно бы вспомнил то, чему учили в школе: что нужно сперва думать, а потом открывать рот.
...
Рейтинг: 0 / 0
Задачка
    #33318880
Владимир Бегун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lom-22Помогите пожалуйста решить такую задачку:
Создать триггер базы данных, не позволяющий вводить в таблицу ААА
...
заранее спасибо за ответ....
Базовая идея тут . Это не триггер, но для некоторых случаев позволяет решить задачку. Кодирование, обход мутаций и обеспечение целостности данных при конкурентном изменении данных в таблице -- это ряд вещей, над которыми приходится задумываться решая эту и подобные ей задачи используя DIY-методы.
...
Рейтинг: 0 / 0
Задачка
    #33318898
Падонак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно,
а если сделать через сохранение поля (фамилия в данном случае) в массиве в пакете, и проверять в триггере на таблицу, записи имеющиеся в таблице + в массиве?
такое возможно?
...
Рейтинг: 0 / 0
Задачка
    #33318909
Sxak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПадонакИнтересно,
а если сделать через сохранение поля (фамилия в данном случае) в массиве в пакете, и проверять в триггере на таблицу, записи имеющиеся в таблице + в массиве?
такое возможно?Возможно и об етом я тоже писал. Воттолько единственное что ето даст - исчезнет ругань на безобидные изменения а проблема разных сессий останется и об ето м я тут тоже писал
...
Рейтинг: 0 / 0
Задачка
    #33318923
Падонак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проблема разных сессий, кажыцо должна при этом уйти?
сейчас проблема, что не зафиксированные данные в одной сессии не видны в другой.
Сохраняя поле в пакет оно будет видно всем и будет видно, сколько значений пытаются записать.
Или я ошибаюс?
...
Рейтинг: 0 / 0
Задачка
    #33318929
Sxak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Падонак
Сохраняя поле в пакет оно будет видно всем и будет видно, сколько значений пытаются записать.
Или я ошибаюс?Ошибаешься
...
Рейтинг: 0 / 0
Задачка
    #33318932
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Падонакпроблема разных сессий, кажыцо должна при этом уйти?
сейчас проблема, что не зафиксированные данные в одной сессии не видны в другой.
Сохраняя поле в пакет оно будет видно всем и будет видно, сколько значений пытаются записать.
Или я ошибаюс?Пакетные переменные видны только текущей сессии

В принципе, можно намутить с глобальным контекстом

Еще как вариант - выставлять пользовательскую блокировку для изменяемой фамилии (dbms_lock), но это жуткая сериализация
...
Рейтинг: 0 / 0
Задачка
    #33318940
Падонак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров Падонакпроблема разных сессий, кажыцо должна при этом уйти?
сейчас проблема, что не зафиксированные данные в одной сессии не видны в другой.
Сохраняя поле в пакет оно будет видно всем и будет видно, сколько значений пытаются записать.
Или я ошибаюс?Пакетные переменные видны только текущей сессии


не знал
...
Рейтинг: 0 / 0
Задачка
    #33318946
Падонак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровПакетные переменные видны только текущей сессии

В принципе, можно намутить с глобальным контекстом

Еще как вариант - выставлять пользовательскую блокировку для изменяемой фамилии (dbms_lock), но это жуткая сериализация
хорошо,
а если в в триггере, во временную(якобы) таблицу в автономной транзакции вставлять то, что пытаются вставить в таблицу?
...
Рейтинг: 0 / 0
Задачка
    #33318950
Sxak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Падонак
хорошо,
а если в в триггере, во временную(якобы) таблицу в автономной транзакции вставлять то, что пытаются вставить в таблицу?
rollback
...
Рейтинг: 0 / 0
Задачка
    #33318964
Sxak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров
В принципе, можно намутить с глобальным контекстом
Не очень понятно как....
dbms_lock понятно можно, а с глоб контекстом? rollback надо оттянуть переменные назад и ето не единственная проблема. Ругаться на чем? на триггере афтер на предложение? тогда ругань пойдет и на безобидные сессии...
на изменение переменных вроде блокировок не бывает так что непонятно как етосделать
...
Рейтинг: 0 / 0
Задачка
    #33318967
Stax.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lom-22Помогите пожалуйста решить такую задачку:
Создать триггер базы данных, не позволяющий вводить в таблицу ААА
более трех однофамильцев, работающих в одном отделе. В случае попытки
вставить четвертого однофамильца в отдел должно выводиться на экран
соответсвующее сообщение.

Тригер будет не базы а табличный
задача не такая простая как кажется,
решения
1.1 блокировка
1.2 триггере проверяем количество
1.2.1 мона вставлять только по одной строке (тогда проще код)
1.2.2 многострочная вставка код чуть сложнее
1.3 снимаем блокировку по завершению транзакции(вставки)

PS
мона организовывать по разному
......
Stax
...
Рейтинг: 0 / 0
Задачка
    #33318974
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровЕще как вариант - выставлять пользовательскую блокировку для изменяемой фамилии (dbms_lock), но это жуткая сериализацияМожно делать select for update для проверяемых однофомильцев. Сессия, желающая проверить ту же фамилию, будет ждать.
...
Рейтинг: 0 / 0
Задачка
    #33318976
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть автору подойдет немного другой сценарий выполнения, ведь не обязательно для решения данной задачи использовать только триггер, можно воспользоваться очень полезной весчью for update:
1. Блокируем все записи с данной фамилией програмно
select family from t where upper('family') = upper('блаблабла') for update nowait;
2. Проверяем сколько у нас выбралось фамилий
3. Вставляем запись либо выдаем предупреждение
Конечно может быть у автора нет возмождности модифицировать программу, но тогда скорее всего встанет проблема описанная выше, не буду проверять некогда но предложу еще один вариант, немного некрасивый но может кто модифицирует и найдет более красивое решение
1. создаем дополнительный столбец с чеком, диапазон значений от 1 до 3 и вешаем уникальный констрейнс на фамилию и этот столбец
2 при вставке в триггере вычисляем значения от 1 до 3 в зависимости от фамилии, если значения будут выходить за рамки выдаем ошибку, в 2 разных сессиях тоже не будет вставки так как одна из низ выдаст unique constrains violatide
PS
to Elic
не думал что вы так не любите комаров :) кожа за столь долгое время должна была уже стать потолще:)
to Падонак
Ты что не можеш понять что тебя либо закроют либо просто удалят этот ник и будут чистить сообщения, правила форума почитай и будь повежливее, а то как то ндоело бред читать
...
Рейтинг: 0 / 0
Задачка
    #33318978
Sxak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic Вячеслав ЛюбомудровЕще как вариант - выставлять пользовательскую блокировку для изменяемой фамилии (dbms_lock), но это жуткая сериализацияМожно делать select for update для проверяемых однофомильцев. Сессия, желающая проверить ту же фамилию, будет ждать.Не совсем. Если только начали вставлять (нет еще однофамильцев) то ждать она ничего не будет и пока не закоммитили можно наделать кучу незакоммиченных сессий с такой же фамилией. Или я ошибаюс?:-)
...
Рейтинг: 0 / 0
Задачка
    #33318981
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic Вячеслав ЛюбомудровЕще как вариант - выставлять пользовательскую блокировку для изменяемой фамилии (dbms_lock), но это жуткая сериализацияМожно делать select for update для проверяемых однофомильцев. Сессия, желающая проверить ту же фамилию, будет ждать.Имелось ввиду и добавляемой и удаляемой - алгоритм Stax расписал
...
Рейтинг: 0 / 0
Задачка
    #33318991
Падонак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic Вячеслав ЛюбомудровЕще как вариант - выставлять пользовательскую блокировку для изменяемой фамилии (dbms_lock), но это жуткая сериализацияМожно делать select for update для проверяемых однофомильцев. Сессия, желающая проверить ту же фамилию, будет ждать.
как ты собираешься это делать, если такой фамилии нет и будет сделана многострочная вставка?
...
Рейтинг: 0 / 0
Задачка
    #33319002
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров Elic Вячеслав ЛюбомудровЕще как вариант - выставлять пользовательскую блокировку для изменяемой фамилии (dbms_lock), но это жуткая сериализацияМожно делать select for update для проверяемых однофомильцев. Сессия, желающая проверить ту же фамилию, будет ждать.Имелось ввиду и добавляемой и удаляемой - алгоритм Stax расписалНу и на обновление фамилии, соответственно, две блокировки - так что сериализация вааще крутая будет
...
Рейтинг: 0 / 0
Задачка
    #33319009
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Плюс, при ошибке нужно снять только вновь выставленные блокировки для этого оператора - короче, тихий ужас
...
Рейтинг: 0 / 0
Задачка
    #33319011
Stax.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vint
...
2 при вставке в триггере вычисляем значения от 1 до 3 в зависимости от фамилии, если значения будут выходить за рамки выдаем ошибку, в 2 разных сессиях тоже не будет вставки так как одна из низ выдаст unique constrains violatide
PS

Как вычислите номер?

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

Код: plaintext
select count( 1 )+ 1  from t where family = 'Иванов'
...
Рейтинг: 0 / 0
25 сообщений из 145, страница 2 из 6
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Задачка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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