|
|
|
XE11g: не имитируется DUP_VAL_ON_INDEX при попытке INSERT в таблицу
|
|||
|---|---|---|---|
|
#18+
В клиентском приложении срабатывет исключение DUP_VAL_ON_INDEX из пакитжа, а там всег лишь INSERT ровно одной записи. Никогда не анализировал индексы. Подскажите, оракл говорит о дубликатах при попытке вставки? Тогда не получается имитировать исключение. К примеру, создаю таблицу и индекс. Поля K и B_ID оба целые и не уникальные: Код: plsql 1. 2. 3. В реале в таблице несколько индексов, а этот с такими св-вами: UNIQUE VALID index_type= FUNCTION-BASED NORMAL funcidx_status= ENABLED column_expression= DECODE("K",1,"K"+"B_ID") Не получается ловушка на DUP_VAL_ON_INDEX Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 17:42 |
|
||
|
XE11g: не имитируется DUP_VAL_ON_INDEX при попытке INSERT в таблицу
|
|||
|---|---|---|---|
|
#18+
exp98 Не получается ловушка на DUP_VAL_ON_INDEXТ.е. по-твоему, выражение DECODE("K",1,"K"+"B_ID") равно одному и тому же для обоих строк? А если начать думать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 17:49 |
|
||
|
XE11g: не имитируется DUP_VAL_ON_INDEX при попытке INSERT в таблицу
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 17:51 |
|
||
|
XE11g: не имитируется DUP_VAL_ON_INDEX при попытке INSERT в таблицу
|
|||
|---|---|---|---|
|
#18+
Elic, это было предположение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 17:52 |
|
||
|
XE11g: не имитируется DUP_VAL_ON_INDEX при попытке INSERT в таблицу
|
|||
|---|---|---|---|
|
#18+
Ах, зараза, забыл написать, что сначала есть строка insert into MY_TTT (id,k,b_id) VALUES (1,1,355434); И я подумал, что 1 + 355434 == 0+ 355435. Потому что в реале это единственный b_id из 4-х, у которого есть соседние b_id, вот на него и подозрение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 18:08 |
|
||
|
XE11g: не имитируется DUP_VAL_ON_INDEX при попытке INSERT в таблицу
|
|||
|---|---|---|---|
|
#18+
[quot exp98]И я подумал, что 1 + 355434 == 0+ 355435 [quot] а оно оказывается ==NULL ? но таких с NULL полно. А что ещё может дать исключение? constraint k in {0, 1} b_id - их конкретно 4 шт, сильно разных, и только 355434 ещё имеется, у остальных соседей нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 18:40 |
|
||
|
XE11g: не имитируется DUP_VAL_ON_INDEX при попытке INSERT в таблицу
|
|||
|---|---|---|---|
|
#18+
exp98, Вы поняли эту конструкцию? Код: plsql 1. У Вас функциональный индекс на поле "K"=1 (остальное в индекс не попадет) со странным условием "K"+"B_ID". Если индекс уникальный то при "K"=1 он будет делать "K"+"B_ID" т.е. 1 + "B_ID" и как следствие на индекс влияет только "B_ID", что не являеться уникальным ("Поля K и B_ID оба целые и не уникальные"). т.о. прибавлять 1 ко всем не вижу смысла, но кто знает Ваши селекты ... exp98В клиентском приложении срабатывет исключение DUP_VAL_ON_INDEX... exp98b_id - их конкретно 4 шт, сильно разных Так как исключение срабатывает Вы ее (запись которую пытались добавить или изменить) не найдете в таблице т.к. исключение сработало (т.е. не понятно что Вы ищите) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 23:10 |
|
||
|
XE11g: не имитируется DUP_VAL_ON_INDEX при попытке INSERT в таблицу
|
|||
|---|---|---|---|
|
#18+
MaximaXXL, спасибо за участие в проблеме. Направление поиска переместилось, я не знал, что decode() в индексе по умолчанию даёт NULL, ну и документация по индексам помогла. Да, Именно так я и понимаю индексное выражение. Искал я не отсутстввующую запись, а ту, к-рая могла мешать новой, выяснилось, что не совсем "ту" искал, но всё равно не нашёл. К+Bid - ради бизнес-правила. Никому это не интересно, но идея индекса была такой, что записей с К=1 не должно быть более одной. А если их нет, то при вставке задавать К=1, иначе NULL. На деле перед вставкой стоит проверка select count(*) into cnt from my_ttt where b_id= число, но я переделал в проце вывод для клиента, и он показывает, что cnt=2, и кажется, что всё логично. В то же время отдельно стоящий запрос на реальных таблицах select count(*) /*into cnt*/ from my_ttt where b_id= число даёт 1, а cnt=2. Вопрос теперь в этом. Но дело может оказаться и хитрее, т.к. это проца вызывается из другой в цикле по курсору. Но там всего 4 вызова, и все должны нормално отрабатывать, ан нет ... такие дела. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 11:11 |
|
||
|
XE11g: не имитируется DUP_VAL_ON_INDEX при попытке INSERT в таблицу
|
|||
|---|---|---|---|
|
#18+
exp98На деле перед вставкой стоит проверка select count(*) into cnt from my_ttt where b_id= число,В многопользовательской среде это глупая наивность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 11:30 |
|
||
|
XE11g: не имитируется DUP_VAL_ON_INDEX при попытке INSERT в таблицу
|
|||
|---|---|---|---|
|
#18+
Причина исключения не в наивности, т.к. легко воспроизводится на этих идешниках в монопольке. А вот в чём, до сих пор не понял. Но кстаи, данная операция весьма ответственная, и её проводят "специально обученные люди". Ну а так, правда Ваша. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 12:14 |
|
||
|
XE11g: не имитируется DUP_VAL_ON_INDEX при попытке INSERT в таблицу
|
|||
|---|---|---|---|
|
#18+
И всё равно, если вызываю процу из девелопера, то она исправно добавляет нужные 4 записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 12:16 |
|
||
|
XE11g: не имитируется DUP_VAL_ON_INDEX при попытке INSERT в таблицу
|
|||
|---|---|---|---|
|
#18+
exp98А вот в чём, до сих пор не понял.Твоё невежество прёт из всех щелей, поэтому попробуй задать вопрос так, чтобы быть понятым. http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 12:21 |
|
||
|
XE11g: не имитируется DUP_VAL_ON_INDEX при попытке INSERT в таблицу
|
|||
|---|---|---|---|
|
#18+
Рассказал бы, какие щели ты увидел, но если кто захочет поразбираться, то вопрос сейчас у меня звучит так. Если запрос select count(*) into cnt from my_ttt where b_id= число выполняется во время работы клиентского приложения, то cnt =2. Когда я выполняю его аналог из девелопера select count(*) /*into cnt*/ from my_ttt where b_id= число, то cnt =1. Это реальный запрос, с той разницей, что есть ещё другие индексы как уник, так и и не уник. Из-за чего может быть различие? Мифических других пользователей нет, это на отдельной БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 12:42 |
|
||
|
XE11g: не имитируется DUP_VAL_ON_INDEX при попытке INSERT в таблицу
|
|||
|---|---|---|---|
|
#18+
exp98, ты несешь несвязный бред... exp98выполняется во время работы клиентского приложения, тону, например, вставило твое "клиентское приложение" вторую строку, посчитало count, роллбэкнулось - и? Либо создавай адекватный тест-кейс, который бы показывал твою проблему, либо давай полный код, а пока это просто какой-то бред... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 13:03 |
|
||
|
XE11g: не имитируется DUP_VAL_ON_INDEX при попытке INSERT в таблицу
|
|||
|---|---|---|---|
|
#18+
exp98если кто захочет поразбираться xtender , оно само роллбэкнулось ?? Весь фреймоворк устроен так, что приложение само не коммитится (кроме специальных случаев). Это делает юзер в ГУИ, в даном случае я за него, и я отвечаю: нет, не роллбэкнулось и не комитилось. А базу тоже полную давать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 13:23 |
|
||
|
XE11g: не имитируется DUP_VAL_ON_INDEX при попытке INSERT в таблицу
|
|||
|---|---|---|---|
|
#18+
exp98и не комитилось.ну какого гуя другая сессия будет видеть вторую строку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 13:32 |
|
||
|
XE11g: не имитируется DUP_VAL_ON_INDEX при попытке INSERT в таблицу
|
|||
|---|---|---|---|
|
#18+
Уважаемые ораклисты, вот так всегда устраивают "побоище на птичьем дворе". Кто-то наносит красную метку, а другие курицы начинают заклёвывать, думая, что это кровь. Не надо побоища, не тратьте времени на писанину либо пишите по делу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 13:35 |
|
||
|
XE11g: не имитируется DUP_VAL_ON_INDEX при попытке INSERT в таблицу
|
|||
|---|---|---|---|
|
#18+
xtender, я в одной сессии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 13:35 |
|
||
|
XE11g: не имитируется DUP_VAL_ON_INDEX при попытке INSERT в таблицу
|
|||
|---|---|---|---|
|
#18+
xtender, ах, ну да, клиент сидит в одной сессии от старта до выхода из программы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 13:36 |
|
||
|
XE11g: не имитируется DUP_VAL_ON_INDEX при попытке INSERT в таблицу
|
|||
|---|---|---|---|
|
#18+
exp98, Тебе вообще-то тут помогают понять элементарные вещи... Никакие "красные метки" никто кроме тебя тут не наносит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 13:38 |
|
||
|
XE11g: не имитируется DUP_VAL_ON_INDEX при попытке INSERT в таблицу
|
|||
|---|---|---|---|
|
#18+
exp98а другие курицыЛамер начинает воинствовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 13:38 |
|
||
|
XE11g: не имитируется DUP_VAL_ON_INDEX при попытке INSERT в таблицу
|
|||
|---|---|---|---|
|
#18+
exp98xtender, я в одной сессии.и девелопер и клиентское приложение у тебя работают в одной сессии? Зы. Жаль тут нельзя сохранять собственные комментарии о пользователе, чтобы легче было человека вспомнить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 14:00 |
|
||
|
XE11g: не имитируется DUP_VAL_ON_INDEX при попытке INSERT в таблицу
|
|||
|---|---|---|---|
|
#18+
xtender, если бы. В любом случае исходная таблица для клиента и девелопера одна и та же, а результат разный. Получив на клиенте неприличный результат, я конечно же делаю откат. Наверное этим уже сбиваю с толку? Т.о. для девелопера таблица остаётся такой же, и там всё видно. А могу на клиенте закомитить, а в девелопере лишнее удалить. Всё легко воспроизводится десяток раз и с любого компа, и девелопер с любого компа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 14:12 |
|
||
|
XE11g: не имитируется DUP_VAL_ON_INDEX при попытке INSERT в таблицу
|
|||
|---|---|---|---|
|
#18+
exp98исходная таблица для клиента и девелопера одна и та же, а результат разный. Все, что пока что вижу - бессвязный поток сознания. Ни постановки проблемы, ни сути затруднений. Делайте вменяемый тест-кейс... либо обращайтесь в лигу сексуальных реформ (с). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 14:18 |
|
||
|
XE11g: не имитируется DUP_VAL_ON_INDEX при попытке INSERT в таблицу
|
|||
|---|---|---|---|
|
#18+
xtenderЗы. Жаль тут нельзя сохранять собственные комментарии о пользователе, чтобы легче было человека вспомнить.В профиль пользователя, помимо "Откуда", нужно добавить "Куда" с редактированием всеми, кроме владельца профиля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 14:38 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39651079&tid=1883929]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
185ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
76ms |
get tp. blocked users: |
1ms |
| others: | 213ms |
| total: | 512ms |

| 0 / 0 |
