1

複数の計算を回避する方法

これはストアドプロシージャ(IBM DB2)にあります

UPDATE my_table 
   SET field1 = my_func(fieldx, 1, 2), 
       field2 = my_func(fieldx, 1, 2) * fieldy
   WHERE my_key = 
 AND another_field < 0;

その関数への重複呼び出しを避けるにはどうすればよいmy_funcですか?

4

1 に答える 1

0

2 つの update ステートメントで実行できます。. .

UPDATE my_table 
    SET field1 = my_func(fieldx, 1, 2)
    WHERE my_key =   AND another_field < 0;

UPDATE my_table 
    SET field2 = field1 * fieldy
    WHERE my_key =   AND another_field < 0;

ところで、以下は DB2 では期待どおりに機能しません。

UPDATE my_table 
    SET field1 = my_func(fieldx, 1, 2),
        field2 = field1 * fieldy
    WHERE my_key =   AND another_field < 0;

これにより、セットの 2 番目の部分に古い値が使用されます。

于 2012-07-18T14:19:35.360 に答える