|
|
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровНу чтож, с такими репликами этот топик скорее всего закроют и автору придется начинать новый А жаль, задачка интересная Кстати а по моему вопросу не скажешь ты или Элик? в смысле поможет ли индекс блокировать вставку на другие сессии? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 08:55 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
при вставке одинаковых уникальных значенй в двух сессиях одна будет заблокирована ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 08:59 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Падонакпри вставке одинаковых уникальных значенй в двух сессиях одна будет заблокированаПри чем здесь уникальных? Тут же неуникальные надо... подучись еще маленько прежде чем советы давать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 09:00 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Sxak Падонакпри вставке одинаковых уникальных значенй в двух сессиях одна будет заблокированаПри чем здесь уникальных? Тут же неуникальные надо... подучись еще маленько прежде чем советы давать действительно, ошыбсо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 09:10 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Падонакдействительно, ошыбсоЧто характерно, это наблюдается в 99 случаях из 100. Взрослый уважающий себя человек уже давно бы вспомнил то, чему учили в школе: что нужно сперва думать, а потом открывать рот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 09:21 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Lom-22Помогите пожалуйста решить такую задачку: Создать триггер базы данных, не позволяющий вводить в таблицу ААА ... заранее спасибо за ответ.... Базовая идея тут . Это не триггер, но для некоторых случаев позволяет решить задачку. Кодирование, обход мутаций и обеспечение целостности данных при конкурентном изменении данных в таблице -- это ряд вещей, над которыми приходится задумываться решая эту и подобные ей задачи используя DIY-методы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 09:24 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Интересно, а если сделать через сохранение поля (фамилия в данном случае) в массиве в пакете, и проверять в триггере на таблицу, записи имеющиеся в таблице + в массиве? такое возможно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 09:32 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
ПадонакИнтересно, а если сделать через сохранение поля (фамилия в данном случае) в массиве в пакете, и проверять в триггере на таблицу, записи имеющиеся в таблице + в массиве? такое возможно?Возможно и об етом я тоже писал. Воттолько единственное что ето даст - исчезнет ругань на безобидные изменения а проблема разных сессий останется и об ето м я тут тоже писал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 09:35 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
проблема разных сессий, кажыцо должна при этом уйти? сейчас проблема, что не зафиксированные данные в одной сессии не видны в другой. Сохраняя поле в пакет оно будет видно всем и будет видно, сколько значений пытаются записать. Или я ошибаюс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 09:38 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Падонак Сохраняя поле в пакет оно будет видно всем и будет видно, сколько значений пытаются записать. Или я ошибаюс?Ошибаешься ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 09:40 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Падонакпроблема разных сессий, кажыцо должна при этом уйти? сейчас проблема, что не зафиксированные данные в одной сессии не видны в другой. Сохраняя поле в пакет оно будет видно всем и будет видно, сколько значений пытаются записать. Или я ошибаюс?Пакетные переменные видны только текущей сессии В принципе, можно намутить с глобальным контекстом Еще как вариант - выставлять пользовательскую блокировку для изменяемой фамилии (dbms_lock), но это жуткая сериализация ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 09:41 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудров Падонакпроблема разных сессий, кажыцо должна при этом уйти? сейчас проблема, что не зафиксированные данные в одной сессии не видны в другой. Сохраняя поле в пакет оно будет видно всем и будет видно, сколько значений пытаются записать. Или я ошибаюс?Пакетные переменные видны только текущей сессии не знал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 09:44 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровПакетные переменные видны только текущей сессии В принципе, можно намутить с глобальным контекстом Еще как вариант - выставлять пользовательскую блокировку для изменяемой фамилии (dbms_lock), но это жуткая сериализация хорошо, а если в в триггере, во временную(якобы) таблицу в автономной транзакции вставлять то, что пытаются вставить в таблицу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 09:45 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Падонак хорошо, а если в в триггере, во временную(якобы) таблицу в автономной транзакции вставлять то, что пытаются вставить в таблицу? rollback ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 09:47 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудров В принципе, можно намутить с глобальным контекстом Не очень понятно как.... dbms_lock понятно можно, а с глоб контекстом? rollback надо оттянуть переменные назад и ето не единственная проблема. Ругаться на чем? на триггере афтер на предложение? тогда ругань пойдет и на безобидные сессии... на изменение переменных вроде блокировок не бывает так что непонятно как етосделать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 09:49 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Lom-22Помогите пожалуйста решить такую задачку: Создать триггер базы данных, не позволяющий вводить в таблицу ААА более трех однофамильцев, работающих в одном отделе. В случае попытки вставить четвертого однофамильца в отдел должно выводиться на экран соответсвующее сообщение. Тригер будет не базы а табличный задача не такая простая как кажется, решения 1.1 блокировка 1.2 триггере проверяем количество 1.2.1 мона вставлять только по одной строке (тогда проще код) 1.2.2 многострочная вставка код чуть сложнее 1.3 снимаем блокировку по завершению транзакции(вставки) PS мона организовывать по разному ...... Stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 09:50 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровЕще как вариант - выставлять пользовательскую блокировку для изменяемой фамилии (dbms_lock), но это жуткая сериализацияМожно делать select for update для проверяемых однофомильцев. Сессия, желающая проверить ту же фамилию, будет ждать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 09:52 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Может быть автору подойдет немного другой сценарий выполнения, ведь не обязательно для решения данной задачи использовать только триггер, можно воспользоваться очень полезной весчью 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 Падонак Ты что не можеш понять что тебя либо закроют либо просто удалят этот ник и будут чистить сообщения, правила форума почитай и будь повежливее, а то как то ндоело бред читать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 09:52 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Elic Вячеслав ЛюбомудровЕще как вариант - выставлять пользовательскую блокировку для изменяемой фамилии (dbms_lock), но это жуткая сериализацияМожно делать select for update для проверяемых однофомильцев. Сессия, желающая проверить ту же фамилию, будет ждать.Не совсем. Если только начали вставлять (нет еще однофамильцев) то ждать она ничего не будет и пока не закоммитили можно наделать кучу незакоммиченных сессий с такой же фамилией. Или я ошибаюс?:-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 09:54 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Elic Вячеслав ЛюбомудровЕще как вариант - выставлять пользовательскую блокировку для изменяемой фамилии (dbms_lock), но это жуткая сериализацияМожно делать select for update для проверяемых однофомильцев. Сессия, желающая проверить ту же фамилию, будет ждать.Имелось ввиду и добавляемой и удаляемой - алгоритм Stax расписал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 09:56 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Elic Вячеслав ЛюбомудровЕще как вариант - выставлять пользовательскую блокировку для изменяемой фамилии (dbms_lock), но это жуткая сериализацияМожно делать select for update для проверяемых однофомильцев. Сессия, желающая проверить ту же фамилию, будет ждать. как ты собираешься это делать, если такой фамилии нет и будет сделана многострочная вставка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 09:59 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудров Elic Вячеслав ЛюбомудровЕще как вариант - выставлять пользовательскую блокировку для изменяемой фамилии (dbms_lock), но это жуткая сериализацияМожно делать select for update для проверяемых однофомильцев. Сессия, желающая проверить ту же фамилию, будет ждать.Имелось ввиду и добавляемой и удаляемой - алгоритм Stax расписалНу и на обновление фамилии, соответственно, две блокировки - так что сериализация вааще крутая будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 10:02 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Плюс, при ошибке нужно снять только вновь выставленные блокировки для этого оператора - короче, тихий ужас ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 10:04 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Vint ... 2 при вставке в триггере вычисляем значения от 1 до 3 в зависимости от фамилии, если значения будут выходить за рамки выдаем ошибку, в 2 разных сессиях тоже не будет вставки так как одна из низ выдаст unique constrains violatide PS Как вычислите номер? ..... Stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 10:04 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=33318812&tid=1956403]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
20ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 303ms |

| 0 / 0 |
