Previous Entry Share Next Entry
кстати, как бы это сделать
1
white_thesis wrote in ru_mysql
Не первый раз сталкиваюсь с задачей такого типа
Надо пробежаться по таблице и сделать замены вида
if (col_a == 255) set col_a = null;
if (col_b == 0) set col_b = col_c/3;
if (col_z < 0) set col_z = 200;
Независимые замены в каждой строке.

Это же можно как-то сделать за один прогон по таблице?
Одним update-ом, а не тремя ( в данном примере ).

  • 1
а почему вместо-то?
set col_a=funca(col_a), col_b=funcb(col_b)

Понятно.
Т.е. это аналог способа от zerkms.

Мне это представлялось так, что присвоение значений полям должно быть внутри функции. А снаружи - только итератор по строкам таблицы.
Ну, вроде
create procedure xxxx ()
CONTAINS SQL,
READS SQL DATA,
MODIFIES SQL DATA
(
if (col_b == 0) set col_b=null; endif;
)

update `table` call xxx();

процедуру и функцию не путаем, да?

  • 1
?

Log in

No account? Create an account