【问题标题】:Variable inside sql query, to avoid multiple computationssql查询中的变量,避免多次计算
【发布时间】:2012-07-18 11:44:58
【问题描述】:

如何避免多次计算

我在存储过程中有这个(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

【问题讨论】:

  • 不确定,因为我没有接触过 db2,但你能不创建一个局部变量并将结果存储在其中吗?在 Sql-Server 中,您可以使用 DECLARE @x [SomeType] 创建一个变量,然后使用 SELECT @x = blah 或 SET @x = blah 设置它 - 在 db2 中不可能实现同样的事情吗?
  • 有点题外话了,但我只是用谷歌搜索了 db2 变量并想出了这个关于设置变量的页面:publib.boulder.ibm.com/infocenter/db2luw/v9/… ...谁能告诉我语法区域的含义?那些破折号到底是什么鬼?!!空格有什么问题?谁设计了那个图表!?

标签: sql stored-procedures db2


【解决方案1】:

您可以使用两个更新语句来做到这一点。 . .

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;

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

【讨论】:

  • 运行两个更新语句可能只有在函数是非确定性的并且需要很长时间才能运行时才能获得显着收益。否则,两次访问表的成本可能会“花费”更多。
猜你喜欢
  • 2015-02-16
  • 1970-01-01
  • 1970-01-01
  • 2016-02-10
  • 1970-01-01
  • 2020-09-22
  • 2016-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多