|
|
|
Синхронизация набора данных; merge+delete в одном операторе возможно?
|
|||
|---|---|---|---|
|
#18+
Есть две таблицы, связанные 1:M. Примерно так: Код: 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. Есть запрос, возвращающий нужный мне набор значений для подчиненной таблицы: ItemRefValue12'value1'21'value2'23'value3' Можно ли одним оператором в связанную (подчиненную) таблицу добавить несуществующие записи, обновить существующие и удалить уже неиспользуемые записи? Т.е. мне в данном случае нужно обновить две записи (item/ref 1/2 и 2/1), добавить одну запись (item/ref 2/3) и удалить три записи (item/ref 1/1, 3/1, 3/2). ________________________ Мы смотрим с оптимизмом... ...в оптический прицел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2012, 17:06:59 |
|
||
|
Синхронизация набора данных; merge+delete в одном операторе возможно?
|
|||
|---|---|---|---|
|
#18+
Alibek B., в чем проблема? начиная с 10g в merge имеется delete кляуза ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2012, 17:12:05 |
|
||
|
Синхронизация набора данных; merge+delete в одном операторе возможно?
|
|||
|---|---|---|---|
|
#18+
Alibek B. , при этом главное не наступить на это как я пару дней назад) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2012, 17:23:58 |
|
||
|
Синхронизация набора данных; merge+delete в одном операторе возможно?
|
|||
|---|---|---|---|
|
#18+
orawishв чем проблема? начиная с 10g в merge имеется delete кляуза А пример использования не покажите? Я в гугле не нашел примера сразу с тремя операциями. И без примера не пойму, как в одном блоке WHEN MATCHED указать сразу и delete и update. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2012, 17:49:20 |
|
||
|
Синхронизация набора данных; merge+delete в одном операторе возможно?
|
|||
|---|---|---|---|
|
#18+
Исходя из этого , должен быть такой запрос: merge into ... when matched update ... when not matched insert ... delete where ... ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2012, 17:53:22 |
|
||
|
Синхронизация набора данных; merge+delete в одном операторе возможно?
|
|||
|---|---|---|---|
|
#18+
Alibek B.orawishв чем проблема? начиная с 10g в merge имеется delete кляуза А пример использования не покажите? Я в гугле не нашел примера сразу с тремя операциями. И без примера не пойму, как в одном блоке WHEN MATCHED указать сразу и delete и update. для беспомощного овоща всегда пожалуйста тыкай кто тебя заставляет заниматься таким сложным для тебя занятием? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2012, 17:57:36 |
|
||
|
Синхронизация набора данных; merge+delete в одном операторе возможно?
|
|||
|---|---|---|---|
|
#18+
брадобрейAlibek B.пропущено... А пример использования не покажите? Я в гугле не нашел примера сразу с тремя операциями. И без примера не пойму, как в одном блоке WHEN MATCHED указать сразу и delete и update. для беспомощного овоща всегда пожалуйста тыкай кто тебя заставляет заниматься таким сложным для тебя занятием? Прости друг, похоже это я дурак. Там нет примера как одновременно юзать и update и delete. Посыпаю голову пеплом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2012, 18:01:01 |
|
||
|
Синхронизация набора данных; merge+delete в одном операторе возможно?
|
|||
|---|---|---|---|
|
#18+
брадобрей, у тебя по первой ссылке из твоего поиска нет в примерах строчки Код: plsql 1. 2. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2012, 18:05:06 |
|
||
|
Синхронизация набора данных; merge+delete в одном операторе возможно?
|
|||
|---|---|---|---|
|
#18+
Vintбрадобрей, у тебя по первой ссылке из твоего поиска нет в примерах строчки Код: plsql 1. 2. ? Так выходит это не я дурак, а автор? Ты спас меня от стеноубийства. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2012, 18:06:52 |
|
||
|
Синхронизация набора данных; merge+delete в одном операторе возможно?
|
|||
|---|---|---|---|
|
#18+
брадобрейТы спас меня от стеноубийства.рано отходить от стены, поскольку утверждение "одновременно юзать и update и delete" провоцирует на мысль о возможности delete без update. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2012, 19:13:04 |
|
||
|
Синхронизация набора данных; merge+delete в одном операторе возможно?
|
|||
|---|---|---|---|
|
#18+
Alibek B.Можно ли одним оператором в связанную (подчиненную) таблицу добавить несуществующие записи, обновить существующие и удалить уже неиспользуемые записи? Нет. В MSSQL оператор merge позволяет это делать, а в Oracle только через отдельные delete после merge. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2012, 09:30:30 |
|
||
|
Синхронизация набора данных; merge+delete в одном операторе возможно?
|
|||
|---|---|---|---|
|
#18+
ivan78В MSSQL оператор ...Ух ты! Не знал, что MS кроме мсдозы еще и мсбасы выпускает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2012, 10:03:14 |
|
||
|
Синхронизация набора данных; merge+delete в одном операторе возможно?
|
|||
|---|---|---|---|
|
#18+
-2-Ух ты! Не знал, что MS кроме мсдозы еще и мсбасы выпускает. Учиться никогда не поздно. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2012, 17:54:41 |
|
||
|
Синхронизация набора данных; merge+delete в одном операторе возможно?
|
|||
|---|---|---|---|
|
#18+
ivan78В MSSQL оператор merge позволяет это делать, а в Oracle только через отдельные delete после merge. В Oracle DELETE в MERGE возможен но только как часть UPDATE - выполняется после UPDATE. Поэтому условие в кляузе DELETE проверяется применительно к уже измененным значениям полей. При этом необходимо помнить об UPDATE триггерах и вообще там были непонятки с какие и в каком порядкe тригера выполняются - где-то на форуме уже было, лень искать. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2012, 20:16:25 |
|
||
|
Синхронизация набора данных; merge+delete в одном операторе возможно?
|
|||
|---|---|---|---|
|
#18+
SYВ Oracle DELETE в MERGE возможен но только как часть UPDATE - выполняется после UPDATE. Поэтому условие в кляузе DELETE проверяется применительно к уже измененным значениям полей. При этом необходимо помнить об UPDATE триггерах и вообще там были непонятки с какие и в каком порядкe тригера выполняются - где-то на форуме уже было, лень искать. SY. Да, я это понимаю. Но автор-то просит немного другого. Ему нужен способ определить записи отсутствующие в исходном множестве, но присутствующие в конечном. Тот самый WHEN NOT MATCHED BY SOURCE из MSSQL-я. А в Оракле его нет. Неудивительно что никто не смог привести работающий пример, но стали вместо этого обзываться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2012, 20:35:49 |
|
||
|
Синхронизация набора данных; merge+delete в одном операторе возможно?
|
|||
|---|---|---|---|
|
#18+
ivan78А в Оракле его нет. Неудивительно что никто не смог привести работающий пример, но стали вместо этого обзываться. Да, в Оракле его нет. Приходится изголяться: Код: 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. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2012, 21:06:56 |
|
||
|
Синхронизация набора данных; merge+delete в одном операторе возможно?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2012, 21:20:07 |
|
||
|
Синхронизация набора данных; merge+delete в одном операторе возможно?
|
|||
|---|---|---|---|
|
#18+
SYДа, в Оракле его нет.это полуправда Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2012, 23:24:15 |
|
||
|
Синхронизация набора данных; merge+delete в одном операторе возможно?
|
|||
|---|---|---|---|
|
#18+
-2-это полуправда В Оракле его нет - правда В Оракле его можно имитировать - полуправда. В тех случаях когда есть тригеры на UPDATE могут быть проблемы. И в любом случае это UPDATE+DELETE что есть падение производительности. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2012, 00:21:28 |
|
||
|
Синхронизация набора данных; merge+delete в одном операторе возможно?
|
|||
|---|---|---|---|
|
#18+
Спасибо всем, мне было полезно. Самому недавно с такой задачей пришлось столкнуться, но не додумался что это можно сделать так просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2012, 09:38:45 |
|
||
|
Синхронизация набора данных; merge+delete в одном операторе возможно?
|
|||
|---|---|---|---|
|
#18+
-2-on (tgt.n=src.n>>>(+)<<<) Мне ведь еще и not matched нужно обрабатывать. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Однако в таком запросе у меня никогда не сработает not matched. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2012, 10:32:04 |
|
||
|
Синхронизация набора данных; merge+delete в одном операторе возможно?
|
|||
|---|---|---|---|
|
#18+
Alibek B.Мне ведь еще и not matched нужно обрабатывать.писал не тебе и с оговоркой "полу...". А тебе надо делать транкейт и вставку всея через сохранение во временной таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2012, 10:36:58 |
|
||
|
Синхронизация набора данных; merge+delete в одном операторе возможно?
|
|||
|---|---|---|---|
|
#18+
Alibek B.-2-on (tgt.n=src.n>>>(+)<<<) Мне ведь еще и not matched нужно обрабатывать. Однако в таком запросе у меня никогда не сработает not matched. Did you check my example? SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2012, 17:33:05 |
|
||
|
Синхронизация набора данных; merge+delete в одном операторе возможно?
|
|||
|---|---|---|---|
|
#18+
SYDid you check my example? Смотрел, идею понял, но в моем случае это не подойдет. Мне нужно время от времени выполнять довольно сложную обработку данных в БД. Для этого у меня используется запрос с большим блоком WITH, в котором задаются параметры обработки. Когда нужно выполнить эту обработку, я загружаю запрос, корректирую блок WITH и запускаю запрос на выполнение. Изначальный вопрос возник именно потому, что я бы хотел указывать WITH только один раз. Если у меня будет два запроса (неважно, будет это merge и delete, либо select union select), значит перед каждым запросом мне нужно будет указывать выражение WITH и перед запуском запроса нужно будет убедиться, что они одинаковы. Поэтому если в один запрос все сделать не получится, тогда я лучше оформлю свой запрос как процедуру, с использованием временных таблиц вместо WITH. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2012, 21:35:16 |
|
||
|
Синхронизация набора данных; merge+delete в одном операторе возможно?
|
|||
|---|---|---|---|
|
#18+
Alibek B.SYDid you check my example? Смотрел, идею понял, но в моем случае это не подойдет. Почему? Код: 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. И корректируй блок WITH на здоровье. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2012, 22:06:45 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=37663629&tid=1888149]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
77ms |
get tp. blocked users: |
2ms |
| others: | 225ms |
| total: | 404ms |

| 0 / 0 |
