|
|
|
вдруг стало не всё понятно в merge
|
|||
|---|---|---|---|
|
#18+
хочу обновить одну таблицу данными другой, и менять только те строки, которые в самом деле разные, и в этом случае не срабатывает контроль на дубли ORA-30926: невозможно получить устойчивый набор строк в исходных таблицах Код: plsql 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2017, 09:34 |
|
||
|
вдруг стало не всё понятно в merge
|
|||
|---|---|---|---|
|
#18+
andreymxхочу обновить одну таблицу данными другой, и менять только те строки, которые в самом деле разные,Ты не понял, для чего MERGE. Обновление одной и той-же строки несколько раз - это недетерминизм результата, зависящего от последовательности обновлений, защитой от чего и является ORA-30926. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2017, 09:40 |
|
||
|
вдруг стало не всё понятно в merge
|
|||
|---|---|---|---|
|
#18+
andreymx, Код: plsql 1. 2. 3. 4. 5. Но если в tbl2 будет ID v - 1 5 - 1 2 - 1 4 А в tbl1 ID v - 1 5 То всё равно будет та же ошибка. Лучше max/min. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2017, 09:43 |
|
||
|
вдруг стало не всё понятно в merge
|
|||
|---|---|---|---|
|
#18+
Elicandreymxхочу обновить одну таблицу данными другой, и менять только те строки, которые в самом деле разные,Ты не понял, для чего MERGE. Обновление одной и той-же строки несколько раз - это недетерминизм результата, зависящего от последовательности обновлений, защитой от чего и является ORA-30926.не, это я понимаю я не понимаю, как проапдейтить только изменившиеся названия из нестабильного источника данных получается, придется отдельный контроль городить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2017, 10:21 |
|
||
|
вдруг стало не всё понятно в merge
|
|||
|---|---|---|---|
|
#18+
andreymxя не понимаю, как проапдейтить только изменившиеся названия из нестабильного источника данныхНет, не понимаешь. У тебя недетерминированный источник. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2017, 10:23 |
|
||
|
вдруг стало не всё понятно в merge
|
|||
|---|---|---|---|
|
#18+
а я о том и говорюElicandreymxя не понимаю, как проапдейтить только изменившиеся названия из нестабильного источника данныхНет, не понимаешь. У тебя недетерминированный источник. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2017, 10:24 |
|
||
|
вдруг стало не всё понятно в merge
|
|||
|---|---|---|---|
|
#18+
andreymxа я о том и говорюНе о том. А MERGE в этом не виноват. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2017, 10:31 |
|
||
|
вдруг стало не всё понятно в merge
|
|||
|---|---|---|---|
|
#18+
andreymxElicпропущено... Ты не понял, для чего MERGE. Обновление одной и той-же строки несколько раз - это недетерминизм результата, зависящего от последовательности обновлений, защитой от чего и является ORA-30926.не, это я понимаю я не понимаю, как проапдейтить только изменившиеся названия из нестабильного источника данных получается, придется отдельный контроль городить -MERGE, соедини мне tbl1 и tbl2 по ID, а затем подмени tbl1.v на tbl2.v -Пользователь, я сджойнил эти таблицы, но там для ID = 1 есть 2 записи в tbl2. Мне нужно чтобы ты чётко указал что на что подменить, я сам не умею такое решать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2017, 10:37 |
|
||
|
вдруг стало не всё понятно в merge
|
|||
|---|---|---|---|
|
#18+
andreymx, ORA-30926 выстреливает при повторной попытке обновить одну и ту же строку. Это НЕ проверка набора данных в using на наличие дублей согласно ключу в кляузе ON. Более того, эта проверка по так называемому ключу не имеет смысла в общем случае. Соединение может быть, например, по неравенству. Другое дело, что в примерах ниже ошибка валится только в случаях 2 и 3 (11.2.0.4), а должна бы всегда. Код: plsql 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. 27. Для твоего случая не совсем понятна суть претензий. Недетерминизма по факту нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2017, 14:17 |
|
||
|
вдруг стало не всё понятно в merge
|
|||
|---|---|---|---|
|
#18+
А ты перепиши MERGE на UPDATE и надеюсь станет все ясно: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2017, 14:19 |
|
||
|
вдруг стало не всё понятно в merge
|
|||
|---|---|---|---|
|
#18+
SY, Это кому ответ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2017, 14:24 |
|
||
|
вдруг стало не всё понятно в merge
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopSY, Это кому ответ? Вроде отвечал andreymx. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2017, 14:35 |
|
||
|
вдруг стало не всё понятно в merge
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopSY, Это кому ответ? Вроде отвечал andreymx. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2017, 14:36 |
|
||
|
вдруг стало не всё понятно в merge
|
|||
|---|---|---|---|
|
#18+
SY, А как насчёт Код: plsql 1. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2017, 14:36 |
|
||
|
вдруг стало не всё понятно в merge
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, WHERE в MERGE проверяется после ON. Т.e. берем TBL1.ID = 1 и ищем WHEN MATCHED в USING. Нашли > 1 и все приехали. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2017, 14:57 |
|
||
|
вдруг стало не всё понятно в merge
|
|||
|---|---|---|---|
|
#18+
Упс. Прошляпил что условие на обе таблицы, посему: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2017, 15:04 |
|
||
|
вдруг стало не всё понятно в merge
|
|||
|---|---|---|---|
|
#18+
SY, Вот теперь когда учтены детали случая andreymx можно перейти к моему сообщению и вот там невозникнование ошибки действительно баг. ЗЫ. Спешка хороша только при ловле блох. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2017, 15:11 |
|
||
|
вдруг стало не всё понятно в merge
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopВот теперь когда учтены детали случая andreymx можно перейти к моему сообщению и вот там невозникнование ошибки действительно баг. Tолько сейчас вспомнил MERGE работает по принципу "значение поля может измениться только один раз": Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2017, 15:31 |
|
||
|
вдруг стало не всё понятно в merge
|
|||
|---|---|---|---|
|
#18+
SY, А он умён если понимает, что обновление на текущее это вовсе не обновление. :) Описание правила "значение поля может измениться только один раз" где-то есть на oracle.com? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2017, 15:41 |
|
||
|
вдруг стало не всё понятно в merge
|
|||
|---|---|---|---|
|
#18+
Да, забавно Код: plsql 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. 27. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2017, 15:45 |
|
||
|
вдруг стало не всё понятно в merge
|
|||
|---|---|---|---|
|
#18+
SY, почему триггер срабатывает 4-раза Код: plsql 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2017, 16:23 |
|
||
|
вдруг стало не всё понятно в merge
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, обновление на одно и тоже значение (напр на 2), тож мог бы посчитать одиночным .... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2017, 16:25 |
|
||
|
вдруг стало не всё понятно в merge
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopSY, А он умён если понимает, что обновление на текущее это вовсе не обновление. :) Описание правила "значение поля может измениться только один раз" где-то есть на oracle.com?в журнале будет одна строка или 10? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2017, 16:44 |
|
||
|
вдруг стало не всё понятно в merge
|
|||
|---|---|---|---|
|
#18+
andreymxdbms_photoshopSY, А он умён если понимает, что обновление на текущее это вовсе не обновление. :) Описание правила "значение поля может измениться только один раз" где-то есть на oracle.com?в журнале будет одна строка или 10? триггер отрабатывает 10 раз ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2017, 16:54 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39571530&tid=1884710]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
160ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 474ms |

| 0 / 0 |
