Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Одновременный вызов ХП с insert в одну таблицу
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Есть следующая процедура: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. при одновременном вызове этой процедуры несколькими пользователями? Таблица определяется как: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Заранее благодарен за помощь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 11:08 |
|
||
|
Одновременный вызов ХП с insert в одну таблицу
|
|||
|---|---|---|---|
|
#18+
а зачем делать именно так? Не проще ли пытаться сразу обновить запись, а если не получилось - то вставлять, а если не получилось - кидать эксепшн? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 11:33 |
|
||
|
Одновременный вызов ХП с insert в одну таблицу
|
|||
|---|---|---|---|
|
#18+
gardenmanа зачем делать именно так? Не проще ли пытаться сразу обновить запись, а если не получилось - то вставлять, а если не получилось - кидать эксепшн? Мне казалось, что так правильнее. Можно поподробнее. Но все таки вопрос в другом, как разграничить одновременный доступ к таблце при инсерте. У меня вылетает "дупликейт кей эксепшн" - и я стал грешить на эту процедуру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 11:56 |
|
||
|
Одновременный вызов ХП с insert в одну таблицу
|
|||
|---|---|---|---|
|
#18+
indicatrix, В DDL, который вы привели нет ничего о ключах (PK,UK), приведите их пожалуйста. Что-то мне подсказывает, что T_ID у вас уникальное. Это обязательно нужно делать? А зачем тогда IDENTITY? В хранимой процедуре можно обработать эксепшн, и посмотреть какой именно уникальный индекс или PK/UK нарушается. типа так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. В любом случае по TP_ID не может быть нарушения уникальности так как это identity. Можно попробовать пойти другим путем: Попытаться вставить запись, если вставка не удалась, то пробовать изменить. Так будет ИМХО логичнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 12:42 |
|
||
|
Одновременный вызов ХП с insert в одну таблицу
|
|||
|---|---|---|---|
|
#18+
gardenmanindicatrix, В DDL, который вы привели нет ничего о ключах (PK,UK), приведите их пожалуйста. Что-то мне подсказывает, что T_ID у вас уникальное. Это обязательно нужно делать? А зачем тогда IDENTITY? T_ID внешний ключ, он неуникален, может повторяться. DDL индексов ниже Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. gardenman В любом случае по TP_ID не может быть нарушения уникальности так как это identity. Можно попробовать пойти другим путем: Попытаться вставить запись, если вставка не удалась, то пробовать изменить. Так будет ИМХО логичнее. Сейчас сделали тест с одновременным вызовом процедуры, посыпались эксепшены. SystemErr R com.ibm.websphere.ce.cm.DuplicateKeyException: 3;SCM.PT Дупликейт кей эксепшн не может же сыпаться на форенкеи... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 14:02 |
|
||
|
Одновременный вызов ХП с insert в одну таблицу
|
|||
|---|---|---|---|
|
#18+
Господа, посоветуйте плз! После одновременного вызова этой процедуры с разных сессий, вылетает дупликейт кей эксепшн. И повторно эта процедура больше нормально не запускается, генерируется дупликейт кей эксепшн. Как мне починить этот код? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 14:07 |
|
||
|
Одновременный вызов ХП с insert в одну таблицу
|
|||
|---|---|---|---|
|
#18+
Т.е. вы хотите сказать, что DB2 генерирует неуникальные IDENTITY значения? Посмотрите внимательно на свою таблицу, может быть какой-нибудь кодер с кривыми руками все же создал там какой-нить индекс. И, кстати, когда я компилил ВАШ пример, то в хранимке у вас есть выражение ID= IN_T_ID, но между прочим в определении таблицы, приведенной вами - нет такого поля. Сможете это объяснить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 14:42 |
|
||
|
Одновременный вызов ХП с insert в одну таблицу
|
|||
|---|---|---|---|
|
#18+
возможно у вас несколько таблиц TP в разных схемах. Посмотрите внимательнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 14:43 |
|
||
|
Одновременный вызов ХП с insert в одну таблицу
|
|||
|---|---|---|---|
|
#18+
gardenman И, кстати, когда я компилил ВАШ пример, то в хранимке у вас есть выражение ID= IN_T_ID, но между прочим в определении таблицы, приведенной вами - нет такого поля. Сможете это объяснить? Просто я изменил названия таблиц и полей, чтобы убрать громозкость. Там нужно написать WHERE T_ID = IN_T_ID; Хотя может я зря изменил названия. gardenmanТ.е. вы хотите сказать, что DB2 генерирует неуникальные IDENTITY значения? Посмотрите внимательно на свою таблицу, может быть какой-нибудь кодер с кривыми руками все же создал там какой-нить индекс. Похоже на то. Я сделал следующие вещи: Код: plaintext 1. 2. 3. Код: plaintext 1. 2. Далее я запустил: Код: plaintext 1. который выдал мне значение 3919. Т.е. Db2 будет выдавать существующий ID. И поэтому сыпет исключения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 15:21 |
|
||
|
Одновременный вызов ХП с insert в одну таблицу
|
|||
|---|---|---|---|
|
#18+
дальше я в скрипте попытался добавить запись в таблицу: Код: plaintext 1. 2. Код: plaintext 1. Для проверки я запустил: Код: plaintext 1. 2. 3. 4. 5. Т.е. он точно грешить на айдентити колонку. Которая начинает "париться" после одновременного инсерта в таблицу при вызове ХП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 15:41 |
|
||
|
Одновременный вызов ХП с insert в одну таблицу
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. Не пойму при чем тут статистика из таблицы? При создании идентити колонки создается неявный SEQUENCE и изнчения берутся из него. смотрите в SYSCAT.SEQUENCES Я за свою жизнь ни разу не видел чтобы идентити дублировалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 18:38 |
|
||
|
Одновременный вызов ХП с insert в одну таблицу
|
|||
|---|---|---|---|
|
#18+
В других ветках я нашел вот такое полезное выражение, выдающее следующее значение для айдентити колонки Код: plaintext 1. 2. 3. 4. 5. 6. Его результат выдал значение 40!!!!!!!! Теперь однозначно понятно где проблема. Только я пока не знаю, что к ней приводит и как это дело поймать :( Может если я буду использовать SEQUENCE у меня будет меньше проблем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 18:41 |
|
||
|
Одновременный вызов ХП с insert в одну таблицу
|
|||
|---|---|---|---|
|
#18+
gardenman Не пойму при чем тут статистика из таблицы? Да, те запросы ни при чем. Я просто не знал как узнать следующее генерируемое значение. gardenman При создании идентити колонки создается неявный SEQUENCE и изнчения берутся из него. смотрите в SYSCAT.SEQUENCES Я за свою жизнь ни разу не видел чтобы идентити дублировалось. У меня получается что это происходит. Может дело в том, как эти данные были туда загружены. Они были загружены с помощью процедуры db2move, описанной вот тут. Но после этого я двигал индексы с помощью Код: plaintext 1. Мне приходится периодически двигать этот индекс. Запись идет в эту таблицу только описанной выше процедурой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 18:50 |
|
||
|
Одновременный вызов ХП с insert в одну таблицу
|
|||
|---|---|---|---|
|
#18+
авторЯ просто не знал как узнать следующее генерируемое значение. Только дернув сиквенс. Для идентити можно сделать select from insert с последующим удалением строки. Это можно сделать одним запросом. Но естественно значение пропадет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 19:02 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=36849636&tid=1602586]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
76ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
| others: | 15ms |
| total: | 192ms |

| 0 / 0 |
