|
|
|
Как в одном запросе обновить поле таблицы расчетным значением другого поля
|
|||
|---|---|---|---|
|
#18+
Вопрос такой, в update-запросе высчитываю и обновляю поле F1, а поле F2 должно принять значение исходя из вновь расcчитанного значения поля F1. Код: plsql 1. 2. 3. 4. 5. Но новое значение поля F1 не видно внутри запроса до самого комита, а заново высчитывать СЛОЖНОЕ_УСЛОВИЕ_1 и делать ВЫЗОВ_СЛОЖНОЙ_ФУНКЦИИ_1 затратно. Заранее благодарен за помощь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2016, 17:25 |
|
||
|
Как в одном запросе обновить поле таблицы расчетным значением другого поля
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2016, 18:17 |
|
||
|
Как в одном запросе обновить поле таблицы расчетным значением другого поля
|
|||
|---|---|---|---|
|
#18+
BazzzНо новое значение поля F1 не видно внутри запроса до самого комита, а заново высчитывать СЛОЖНОЕ_УСЛОВИЕ_1 и делать ВЫЗОВ_СЛОЖНОЙ_ФУНКЦИИ_1 затратн Высчитывайте СЛОЖНОЕ_УСЛОВИЕ_1 с использование СТЕ (with) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 10:57 |
|
||
|
Как в одном запросе обновить поле таблицы расчетным значением другого поля
|
|||
|---|---|---|---|
|
#18+
Bazzz, я бы для начала не впадал в истерику, а посмотрел, являются ли СЛОЖНОЕ_УСЛОВИЕ_1 и ВЫЗОВ_СЛОЖНОЙ_ФУНКЦИИ_1 имутабными, или хотя бы stable. и понадеялся на оптимизатор. всё же не инструкции пишем. (ну там нотификацию бы имутабную воткнул и проверил гипотезу "о черном ящике") во вторых в пж можно сказать Код: sql 1. 2. 3. 4. 5. 6. 7. 8. -- тоже вариант ну и наконец подзапрос во from или CTE но варианта ветвления вида SET #CASE WHEN ... #THEN {a=b ,c =d,e=f} и в т.п. конструкциях SQL -- наверное немного не хватает. нужно какое слово -- ветвитель не значений, а вложенных саб--кляуз. как оно должно выглядеть -- не совсем понятно. но было бы неплохо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 17:30 |
|
||
|
Как в одном запросе обновить поле таблицы расчетным значением другого поля
|
|||
|---|---|---|---|
|
#18+
Добрый день, tip78! Ознакомился, но по ссылке нет ничего по теме!? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2016, 13:17 |
|
||
|
Как в одном запросе обновить поле таблицы расчетным значением другого поля
|
|||
|---|---|---|---|
|
#18+
big-trot, спасибо, но with не интересно, в каждой строке будет разное значение, получается использование темп-таблички ...., проще тогда условие повторить для каждого поля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2016, 13:25 |
|
||
|
Как в одном запросе обновить поле таблицы расчетным значением другого поля
|
|||
|---|---|---|---|
|
#18+
qwwqBazzz, я бы для начала не впадал в истерику, а посмотрел, являются ли СЛОЖНОЕ_УСЛОВИЕ_1 и ВЫЗОВ_СЛОЖНОЙ_ФУНКЦИИ_1 имутабными, или хотя бы stable. и понадеялся на оптимизатор. всё же не инструкции пишем. (ну там нотификацию бы имутабную воткнул и проверил гипотезу "о черном ящике") во вторых в пж можно сказать Код: sql 1. 2. 3. 4. 5. 6. 7. 8. -- тоже вариант ну и наконец подзапрос во from или CTE но варианта ветвления вида SET #CASE WHEN ... #THEN {a=b ,c =d,e=f} и в т.п. конструкциях SQL -- наверное немного не хватает. нужно какое слово -- ветвитель не значений, а вложенных саб--кляуз. как оно должно выглядеть -- не совсем понятно. но было бы неплохо. Код: plsql 1. Но код: Код: plsql 1. 2. 3. дает ошибку: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2016, 14:11 |
|
||
|
Как в одном запросе обновить поле таблицы расчетным значением другого поля
|
|||
|---|---|---|---|
|
#18+
Bazzz, да, фокус не удался. я исходил из фозможности такого, например: Код: sql 1. 2. 3. а на деле SET (a,b)=(v1,v2) видимо не есть SET (a,b)=ROW(v1,v2), а есть частный случай записи поколоночного присвоения, сводимой синтакс--анализатором к стандарту -- т.е. "рыбу заворачивали", как обычно. пичаль. ну дак кейсом больше -- кейсом меньше -- уже в принципе не важно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2016, 14:55 |
|
||
|
Как в одном запросе обновить поле таблицы расчетным значением другого поля
|
|||
|---|---|---|---|
|
#18+
ЗЫ предположение , что оптимайзер умнее дерева -- тоже не оправдано: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. т.е. таки у ей унутре --неонка галимая. Пишите через cte. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2016, 15:45 |
|
||
|
Как в одном запросе обновить поле таблицы расчетным значением другого поля
|
|||
|---|---|---|---|
|
#18+
qwwqПишите через cte. по-моему, производительнее будет двойной расчет поля сделать для каждой обновляемой строки, чем через временную таблицу (она же CTE). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2016, 16:47 |
|
||
|
Как в одном запросе обновить поле таблицы расчетным значением другого поля
|
|||
|---|---|---|---|
|
#18+
qwwq Код: plsql 1. А разве этого не хватит? Код: plsql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2016, 22:47 |
|
||
|
Как в одном запросе обновить поле таблицы расчетным значением другого поля
|
|||
|---|---|---|---|
|
#18+
PgSQLanonymous2А разве этого не хватит? Код: plsql 1. 2. 3. 4. 5. 6. Наверное, хватит. Как я понял, Вы предлагаете рассчитав поле f1, положить результат в табличную переменную n с полем f1_new, а далее использовать ее в явном и не явном (с дальнейшей калькуляцией) виде для обновления f1 и f2, соответственно. Другого варианта, похоже, нет. Спасибо!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2016, 08:08 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=39235492&tid=1997230]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
182ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 499ms |

| 0 / 0 |
