sql查询中的变量,以避免多次计算

sql查询中的变量,以避免多次计算,sql,stored-procedures,db2,Sql,Stored Procedures,Db2,如何避免多次计算 我在一个存储过程(IBMDB2)中有这个 更新我的表格 SET field1=my_func(fieldx,1,2), field2=my_func(fieldx,1,2)*fieldy 其中我的_键= 另一个_字段

如何避免多次计算

我在一个存储过程(IBMDB2)中有这个

更新我的表格
SET field1=my_func(fieldx,1,2),
field2=my_func(fieldx,1,2)*fieldy
其中我的_键=
另一个_字段<0;

如何避免重复调用该函数
my_func

您可以使用两个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;
更新我的表格
SET field1=my_func(fieldx,1,2)
其中my_key=和另一个_字段<0;
更新我的表格
设置field2=field1*fieldy
其中my_key=和另一个_字段<0;
顺便说一句,在DB2中,以下操作将无法正常工作:

UPDATE my_table 
    SET field1 = my_func(fieldx, 1, 2),
        field2 = field1 * fieldy
    WHERE my_key =   AND another_field < 0;
更新我的表格
SET field1=my_func(fieldx,1,2),
field2=field1*fieldy
其中my_key=和另一个_字段<0;

这将对集合的第二部分使用旧值。

不确定,因为我没有接触db2,但是您不能创建一个局部变量并将结果存储在其中吗?在Sql Server中,您只需使用DECLARE@x[SomeType]创建一个变量,然后使用SELECT@x=blah或set@x=blah设置它-在db2中不可能实现同样的事情吗?有点脱离主题,但我只是在Google上搜索了db2变量,并找到了关于设置变量的页面:。。。谁能告诉我语法区是什么意思吗?那些破折号到底是什么?!!空格有什么问题?谁设计了那个图表!?。如果函数是非确定性的,并且需要花费大量时间来运行,那么运行两个update语句可能是一个显著的收益。否则,两次访问表的成本可能会更高。
UPDATE my_table 
    SET field1 = my_func(fieldx, 1, 2),
        field2 = field1 * fieldy
    WHERE my_key =   AND another_field < 0;