代码之家  ›  专栏  ›  技术社区  ›  Patrick

是否将局部变量的内容写入resultset列?

  •  0
  • Patrick  · 技术社区  · 16 年前

    通过使用存储过程,是否可以将整列值从resultset提取到一个局部变量中,在那里对其进行操作,然后将其写回resultset的列中?

    如果是这样,语法会是什么样子?

    4 回复  |  直到 7 年前
        1
  •  1
  •   Tim Cooper    13 年前

    下面几行的东西应该能起到作用。

    DECLARE @iSomeDataItem INT
    
    SELECT @iSomeDataItem = TableColumName
    FROM TableName
    WHERE ID = ?
    
    --Do some work on the variable
    SET @iSomeDataItem = @iSomeDataItem + 21 * 2
    
    UPDATE TableName
        SET TableColumName = @iSomeDataItem
    WHERE ID = ?
    

    这种实现的缺点是它只在特定的记录上运行,但是这可能是您希望实现的。

        2
  •  0
  •   Thorsten    16 年前

    您要寻找的可能是更符合用户定义函数的行,该函数可以像任何其他内置函数一样在sql中使用。

    不确定这在db2中是如何工作的,但对于oracle来说,可能是这样的:

    Create or replace Function Decrement (pIn Integer) 
    return Integer
    Is
    Begin
      return pIn - 1;
    end;
    

    你可以在sql中使用它,例如。

    Select Decrement (43)
    From Dual;
    

    应返回“最终答案”(42)。

    希望这有帮助。

        3
  •  0
  •   Patrick    16 年前

    谢谢你的回复,我换了一种方式,不用任何程序就解决了问题。核心问题是使用不同的列值计算日期,列值并转换为正确的格式。通过在select中使用大的“case-when”语句解决了这个问题。

    再次感谢…-)

        4
  •  0
  •   GrumpyCrouton    7 年前

    为什么不直接在update语句中进行操作呢?您不需要将它加载到变量中,操纵它,然后保存它。

    update TableName
    SET TableColumnName=TableColumnName + 42 /* or what ever manipulation you want */
    WHERE ID = ?
    

    也,

    @iSomeDataItem + 21 * 2
    

    同:

    @iSomeDataItem + 42
    

    功能概念是一个不必要的额外步骤,除非以下大部分是正确的:

    1)您需要在许多地方使用此计算 2)计算复杂 3)计算可以改变