|
merge + delete
|
|||
---|---|---|---|
#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.
Почему не IdVal3p3 Only those rows which match both the ON clause and the DELETE WHERE clause are deleted. 1 && 5 и под условие в on и под delete'вское where - попадают. Почему тогда не удалились? Или я не правильно что-то понял? _________________ "Helo, word!" - 17 errors 56 warnings ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2010, 13:52 |
|
merge + delete
|
|||
---|---|---|---|
#18+
Опа, а Код: plaintext 1. 2. 3. 4. 5. 6. 7.
IdVal3p3 но ни грамма не поспособствовало пониманию... Я предполагаю что должно происходить следующее: 1. Производиться join по on 2. По всем row полученного от join'a 2.1. Если выполняется where update'а - делается update 2.2. Если выполняется where delete'а - делается delete Или я ошибаюсь? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2010, 14:04 |
|
merge + delete
|
|||
---|---|---|---|
#18+
Ex_Soft, не совсем так The only rows affected by this clause are those rows in the destination table that are updated by the merge operation. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2010, 14:06 |
|
merge + delete
|
|||
---|---|---|---|
#18+
env The only rows affected by this clause are those rows in the destination table that are updated by the merge operation. Гм... Удаляются только те записи, которые про'update'лись? Но тогда зачем делать "лишний" update? Да и на пальцах: 1. Производиться join по on 2. По всем row полученного от join'a 2.1. Если выполняется where update'а - делается update 2.2. Если выполняется where update'а (т.е. запись про'update'лась) && where delete'а - делается delete Но where update'а и where delete'а, как правило, взаимоисключающие: http://www.oracle-wiki.ru/wiki/Merge Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Получается delete вообще не произойдет. Что и имеет место в первом примере . IMHO, довольно-таки довольно неожиданное и нетривиальное поведение... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2010, 14:37 |
|
merge + delete
|
|||
---|---|---|---|
#18+
Ex_Soft, авторУдаляются только те записи, которые про'update'лись? Но тогда зачем делать "лишний" update? емнип, delete проходит по значениям получившимся после update. Т.е. одно из применений - помечаем записи как старые и сразу удаляем. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2010, 14:42 |
|
merge + delete
|
|||
---|---|---|---|
#18+
Ex_SoftНо where update'а и where delete'а, как правило, взаимоисключающие: http://www.oracle-wiki.ru/wiki/Merge Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Получается delete вообще не произойдет. Опять ищем интерпретации, при том, что в документации ВСЕ поясняет один абзац. Вот вам следующе предложение:MERGEThe DELETE WHERE condition evaluates the updated value , not the original value that was evaluated by the UPDATE SET ... WHERE condition. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2010, 14:43 |
|
merge + delete
|
|||
---|---|---|---|
#18+
-2-MERGEThe DELETE WHERE condition evaluates the updated value , not the original value that was evaluated by the UPDATE SET ... WHERE condition. И что Вы этим хотите сказать? Код: plaintext 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2010, 16:13 |
|
merge + delete
|
|||
---|---|---|---|
#18+
Ex_Soft, Не понял вашего удивления. Всё правильно, только строки попавшие под условия update прошли на вход delete. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2010, 16:27 |
|
merge + delete
|
|||
---|---|---|---|
#18+
Ex_Soft..Гм... Удаляются только те записи, которые про'update'лись? Но тогда зачем делать "лишний" update?.. IMHO, довольно-таки довольно неожиданное и нетривиальное поведение... всё понятно и ожидаемо, если на сабж посмотреть в его развитии. 9i - в мерже дилитовой кляузы просто не было и, соответственно, where в апдейтовой кляузе имел смысл ограничения всея when matched. ну а когда дилит добавили, то добавили, как добавили. можно считать что удаляются именно проапдейченные строки - мнемонически, наверное, так понятнее осознать (и запомнить) сей камуфлет. а взаправду ли апедейчутся ли они перед удалением, думаю, что нет.., ну а какая разница? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2010, 16:30 |
|
merge + delete
|
|||
---|---|---|---|
#18+
envНе понял вашего удивления. Всё правильно, только строки попавшие под условия update прошли на вход delete. http://www.oracle-wiki.ru/wiki/Merge Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
На вход к update попадут записи у коих source1.col2 IS NOT NULL, далее они попадают на вход delete и проверяются на source1.col2 IS NULL. Ессесно такого не может быть, так как иначе они бы не попали под update. Два взаимоисключающих условия. delete, вопреки ожиданиям, - никогда не произойдет. Просто сам синтаксис, IMHO, не способствует интуитивно понятному трактованию сей конструкции. orawishвсё понятно и ожидаемо, если на сабж посмотреть в его развитии. 9i Да я тока-тока намедни с оракулом столкнулсо... orawishа взаправду ли апедейчутся ли они перед удалением, думаю, что нет.., ну а какая разница ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
tr_AU_TableSecondary Но в trigger'е ж может быть не невинное put_line, а кое-что посерьезнее... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2010, 17:37 |
|
merge + delete
|
|||
---|---|---|---|
#18+
Ex_Soft.. Но в trigger'е ж может быть не невинное put_line, а кое-что посерьезнее... Что? ~армагедец? а по какому поводу? в триггере или аудит живёт или реакция на изменение значений атрибутов . пусть себе и аудитит и реагирует. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2010, 17:47 |
|
merge + delete
|
|||
---|---|---|---|
#18+
Ex_SoftНо в trigger'е ж может быть не невинное put_line, а кое-что посерьезнее...Может у оракла и не лучшая реализация MERGE, но что-то посерьезнее так или иначе требует навыков чтения документации: MERGEIf the update clause is executed, then all update triggers defined on the target table are activated. ... Any delete triggers defined on the target table will be activated for each row deletion. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2010, 17:48 |
|
merge + delete
|
|||
---|---|---|---|
#18+
Ex_Soft, Вы просто лучше не примеры на oracle-wiki.ru смотрите, а читайте доку от производителя. Там конечно тоже ляпы бывают, но реже. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2010, 17:54 |
|
merge + delete
|
|||
---|---|---|---|
#18+
orawishв триггере или аудит живёт или реакция на изменение значений атрибутов . пусть себе и аудитит и реагирует. А зачем реагировать на изменение атрибутов в row, которая затем будет удалена? -2-Может у оракла и не лучшая реализация MERGE, но что-то посерьезнее так или иначе требует навыков чтения документации: MERGEIf the update clause is executed, then all update triggers defined on the target table are activated. ... Any delete triggers defined on the target table will be activated for each row deletion. Это Вы к чему? Что при update trigger сработает - дык мы это уже выяснили... envВы просто лучше не примеры на oracle-wiki.ru смотрите, а читайте доку от производителя Понято... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2010, 18:15 |
|
merge + delete
|
|||
---|---|---|---|
#18+
Ex_Softorawishв триггере или аудит живёт или реакция на изменение значений атрибутов . пусть себе и аудитит и реагирует. А зачем реагировать на изменение атрибутов в row, которая затем будет удалена? .. например, чтобы ~сошлось.. если на восходящую денормализацию посмотреть, то: insert +5 update -2 delete -3 итого: 0 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2010, 18:45 |
|
merge + delete
|
|||
---|---|---|---|
#18+
orawish[quot Ex_Soft а взаправду ли апедейчутся ли они перед удалением, думаю, что нет.., ну а какая разница? Triggers. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2010, 20:01 |
|
merge + delete
|
|||
---|---|---|---|
#18+
Всем доброго дня! Предлагаю разминку: кто сможет предложить оптимальный способ решения этой задачи через MERGE? Сам сделал так: Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2019, 10:33 |
|
merge + delete
|
|||
---|---|---|---|
#18+
escaper_этой задачи http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2019, 10:59 |
|
merge + delete
|
|||
---|---|---|---|
#18+
escaper_, почти сделал.. но "поймал" ошибку ORA-00942. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2019, 16:14 |
|
merge + delete
|
|||
---|---|---|---|
#18+
Elic, Хотя простой ответ RTFM бывает оправдан, когда дается просто лентяю, ссылка на документацию (даже если это набор ключевых слов для поиска в Google) все же лучше. Можете послать поближе? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2019, 08:58 |
|
merge + delete
|
|||
---|---|---|---|
#18+
escaper_ через MERGE ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2019, 09:05 |
|
merge + delete
|
|||
---|---|---|---|
#18+
Через MERGE потому, что такое условие задачи. А как вы видите решение? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2019, 09:31 |
|
merge + delete
|
|||
---|---|---|---|
#18+
escaper_ Через MERGE потому, что такое условие задачи. А как вы видите решение? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2019, 09:45 |
|
merge + delete
|
|||
---|---|---|---|
#18+
escaper_, delete, update или delete, modify not null default 'UNKNOWN' ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2019, 10:12 |
|
|
start [/forum/topic.php?fid=52&msg=36656202&tid=1881896]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 279ms |
total: | 429ms |
0 / 0 |