|
row_count внутри VALUES()-списка команды insert (ввод после DML): почему она всегда ноль ?
|
|||
---|---|---|---|
#18+
hi all Есть after-триггер, навешенный на таблиу t1, в котором идёт запись в лог её изменений (t2) , а также добавление при каждом DML одной строки в еще один, "дурацкий лог", - таблицу t2log. И добавление в t2log использует переменную row_count. Внезапно выяснилось, что вот этот код: Код: plaintext 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.
Читаю доку: langref 3.0, стр. 388ROW_COUNT Доступно в: PSQL. Синтаксис: ROW_COUNT Тип возвращаемого результата: INTEGER Контекстная переменная ROW_COUNT содержит число строк, затронутых последним оператором DML (INSERT, UPDATE, DELETE, SELECT или FETCH) в текущем триггере , хранимой процедуре или исполняемом блоке . . . Важно Переменная ROW_COUNT не может быть использована для определения количества строк, затронутых при выполнении операторов EXECUTE STATEMENT или EXECUTE PROCEDURE. Для оператора MERGE переменная ROW_COUNT будет содержать 0 или 1, даже если было затронуто более записей- и в упор не понимаю, что неправильного в указании row_count внутри VALUES() того инсерта, что следует сразу за только что выполненным DML. Развейте туман, плз... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 17:57 |
|
row_count внутри VALUES()-списка команды insert (ввод после DML): почему она всегда ноль ?
|
|||
---|---|---|---|
#18+
Таблоид, я точно не уверен, но по моему он пытается посчитать количество затронутых записей сам в себе. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 18:02 |
|
row_count внутри VALUES()-списка команды insert (ввод после DML): почему она всегда ноль ?
|
|||
---|---|---|---|
#18+
точнее в том insert в котором ты его вписал ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 18:02 |
|
row_count внутри VALUES()-списка команды insert (ввод после DML): почему она всегда ноль ?
|
|||
---|---|---|---|
#18+
Симонов Денисточнее в том insert в котором ты его вписаля вот тоже так догадываюсь :-) но с какого перепугу он пишет в row_count результат еще не выполненного insert'a ? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 18:18 |
|
row_count внутри VALUES()-списка команды insert (ввод после DML): почему она всегда ноль ?
|
|||
---|---|---|---|
#18+
Таблоидно с какого перепугу он пишет в row_count результат еще не выполненного insert'a ? Потому что надо же эту переменную где-то обнулять. Вполне естественно, что она обнуляется в начале работы запроса или даже перед ним. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 18:21 |
|
row_count внутри VALUES()-списка команды insert (ввод после DML): почему она всегда ноль ?
|
|||
---|---|---|---|
#18+
Таблоидс какого перепугу он пишет в row_count результат еще не выполненного insert'a ? инсерт начинает свою работу с обнуления этого счетчика, потом читает VALUES-список ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 18:51 |
|
row_count внутри VALUES()-списка команды insert (ввод после DML): почему она всегда ноль ?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovТаблоидно с какого перепугу он пишет в row_count результат еще не выполненного insert'a ?Потому что надо же эту переменную где-то обнулять. Вполне естественно, что она обнуляется в начале работы запроса или даже перед ним.Вот если бы она обнулялась "чуток позже" начала DML (т.е. когда уже пошли изменения), то было бы гут. А так получается, что обнуляется "чуток перед" ним, и выглядит это как-то не очень... лишнюю переменную держать надо... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 18:52 |
|
row_count внутри VALUES()-списка команды insert (ввод после DML): почему она всегда ноль ?
|
|||
---|---|---|---|
#18+
dimitrТаблоидс какого перепугу он пишет в row_count результат еще не выполненного insert'a ?инсерт начинает свою работу с обнуления этого счетчика, потом читает VALUES-списокА почему не было сделано наоборот ? (и про update/delete, судя по всему, - там тоже самое ?) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 18:54 |
|
row_count внутри VALUES()-списка команды insert (ввод после DML): почему она всегда ноль ?
|
|||
---|---|---|---|
#18+
ТаблоидВот если бы она обнулялась "чуток позже" начала DML (т.е. когда уже пошли изменения), то было бы гут. А так получается, что обнуляется "чуток перед" ним, и выглядит это как-то не очень. Ну не знаю, не знаю. Всегда обнуляю переменные перед началом цикла/условия/логического блока, а не "чуток позже". Странно как раз ожидать чего-то другого, как по мне. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 18:55 |
|
row_count внутри VALUES()-списка команды insert (ввод после DML): почему она всегда ноль ?
|
|||
---|---|---|---|
#18+
miwaonlineТаблоидВот если бы она обнулялась "чуток позже" начала DML (т.е. когда уже пошли изменения), то было бы гут. А так получается, что обнуляется "чуток перед" ним, и выглядит это как-то не очень. Ну не знаю, не знаю. Всегда обнуляю переменные перед началом цикла/условия/логического блока, а не "чуток позже". Странно как раз ожидать чего-то другого, как по мне.не, погодь! ты про переменные, которыми ты сам явно управляешь - это один коленкор. А тут речь про row_count, которая управляется движком, ты менять её не можешь. Ну, и вот: сделал ты некий "DML_1", дальше хочешь записать в базу значение row_count, которую движок пока еще "держит" именно для этого "DML_1". И выясняется вдруг, что записать её можно, только предварительно сохранив в переменной. Неуклюже как-то. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 18:58 |
|
row_count внутри VALUES()-списка команды insert (ввод после DML): почему она всегда ноль ?
|
|||
---|---|---|---|
#18+
ТаблоидА тут речь про row_count, которая управляется движком, ты менять её не можешь. А вот движок - может. И меняет. Как ты вообще себе представляешь, например, "insert into t2 select row_count from t1"?.. Нету унутре места для обнуления. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 19:02 |
|
row_count внутри VALUES()-списка команды insert (ввод после DML): почему она всегда ноль ?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovКак ты вообще себе представляешь, например, "insert into t2 select row_count from t1"?.. Нету унутре места для обнуления.Было бы логично, если бы в этом инсерте использовался row_count, который был установлен по итогам вполнения предыдущего DML. И если сейчас добавилось 3 строки, а предыдущий DML поменял только 1 строку, то в таблицу t2 должно было бы вставиться в каждую из трёх строк именно число 1. Но теперь я вообще ничего не понимать. Потому что вот эта штука: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 19:20 |
|
row_count внутри VALUES()-списка команды insert (ввод после DML): почему она всегда ноль ?
|
|||
---|---|---|---|
#18+
Таблоид, row_count изначально не был рассчитан на такое использование. А то что он меняется по мере insert ... select довольно предсказуемо ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 19:28 |
|
row_count внутри VALUES()-списка команды insert (ввод после DML): почему она всегда ноль ?
|
|||
---|---|---|---|
#18+
ТаблоидОбъясните мне популярно: с какого будуна row_count еще и меняется в процессе выполнения insert'a ? А где ещё ему меняться, когда основное и единственное назначение этой переменной - подсчитывать число обработанных записей? Хотя с другой стороны, конечно, движок мог бы делать и row_count = RowsAffected() один раз уже после успешного выполнения запроса. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 19:28 |
|
|
start [/forum/topic.php?fid=40&msg=39186498&tid=1562313]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 264ms |
total: | 392ms |
0 / 0 |