|
MERGE, затрагивающий не более 1 строки, может сод. RETURNING. Про "чью" строку речь?
|
|||
---|---|---|---|
#18+
hi all Есть две таблички, "источник" и "приёмник". Допустим, в источнике есть _строго_ одна запись, ID которой нет в приёмнике: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Источник внутри using'a, как видно, специально "причёсан" под наши знания о том ID'шнике, которого нет в`t`. Некрасиво. Но если попробуем иначе, то получим шваброй: Код: plaintext 1. 2. 3.
В доке по 3.0 сказано:langref30.pdf, pg. 251Оператор MERGE, затрагивающий не более одной строки , может содержать конструкцию RETURNING для возвращения значений добавленной, модифицируемой или удаляемой строки Вот статистика из трейса для merge-returning'a, который обламывается: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
А теперь вопрос. Что подразумевается под "затрагиванием" - источник, что ле ?! ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2015, 13:25 |
|
MERGE, затрагивающий не более 1 строки, может сод. RETURNING. Про "чью" строку речь?
|
|||
---|---|---|---|
#18+
Таблоид, вообще-то приёмик merge into target using source ... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2015, 13:34 |
|
MERGE, затрагивающий не более 1 строки, может сод. RETURNING. Про "чью" строку речь?
|
|||
---|---|---|---|
#18+
Симонов Денис, ну, и ? я затронул приёмник только 1 раз, чего он обламывается тогда ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2015, 13:38 |
|
MERGE, затрагивающий не более 1 строки, может сод. RETURNING. Про "чью" строку речь?
|
|||
---|---|---|---|
#18+
Таблоид, new и old могут быть только в приёмнике. Но returning может содержать выражение не только из приёмника. Преобразуем твой первый пример так Код: sql 1. 2. 3.
никакой ошибки нет. Вероятно причина в этом. Т.е. похоже не в приёмнике ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2015, 13:57 |
|
MERGE, затрагивающий не более 1 строки, может сод. RETURNING. Про "чью" строку речь?
|
|||
---|---|---|---|
#18+
Симонов Денис, тут наверное правильнее сказать что в источнике может быть только 1 запись ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2015, 13:59 |
|
MERGE, затрагивающий не более 1 строки, может сод. RETURNING. Про "чью" строку речь?
|
|||
---|---|---|---|
#18+
Симонов Денистут наверное правильнее сказать что в источнике может быть только 1 записьЭто требование выглядит очень странно. Если в источнике совпало с USING-требованием 100500 записей, но в приёмнике в итоге WHEN-разруливаний была изменена строго одна запись, то что мешает вывести RETURNING-результат ? С какого будуна там будет "multiple rows in singleton select" ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2015, 14:22 |
|
MERGE, затрагивающий не более 1 строки, может сод. RETURNING. Про "чью" строку речь?
|
|||
---|---|---|---|
#18+
Таблоид, моё мнение таково что если в источнике более одной строки, то returning применять нельзя. Ибо никто не даст гарантии что каждый раз там будет обновлена только 1 строка. Так что фича вроде бы есть, но применять её можно очень ограничено. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2015, 14:32 |
|
MERGE, затрагивающий не более 1 строки, может сод. RETURNING. Про "чью" строку речь?
|
|||
---|---|---|---|
#18+
Симонов Денисмоё мнение таково что если в источнике более одной строки, то returning применять нельзя. Ибо никто не даст гарантии что каждый раз там будет обновлена только 1 строка.Дык никто и не требует гарантии от источника, который, например, пытается вставить бубликаты в таблицу с PK/UK (я сейчас не про merge): стейтмент обламывается, и всё, дальше - проблема индейца. Что здесь мешает тоже самое сбацать ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2015, 14:36 |
|
MERGE, затрагивающий не более 1 строки, может сод. RETURNING. Про "чью" строку речь?
|
|||
---|---|---|---|
#18+
Таблоид, для источника такую гарантию можно дать почти всегда, но это должен делать проектировщик. RDB$DATABASE, запрос с агрегатами без группировок, FIRST(1)/ROWS 1 и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2015, 14:42 |
|
|
start [/forum/topic.php?fid=40&fpage=76&tid=1562815]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
others: | 274ms |
total: | 420ms |
0 / 0 |