将局部变量的内容写回结果集列?

时间:2009-02-11 07:58:26

标签: sql stored-procedures db2

通过使用存储过程,是否有可能将结果集中的整数列值提取到局部变量中,在那里操作它然后将其写回结果集的列?

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

4 个答案:

答案 0 :(得分:1)

以下几行应该可以解决问题。

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 = ?

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

答案 1 :(得分:0)

您正在寻找的内容可能更像是用户定义的函数,可以像在任何其他内置函数中一样在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)。

希望这有帮助。

答案 2 :(得分:0)

为什么不在update语句中进行操作?您无需将其加载到变量中,对其进行操作,然后将其保存。

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

@iSomeDataItem + 21 * 2

与:

相同
@iSomeDataItem + 42

除非以下大多数情况属实,否则功能构思是一个不必要的额外步骤:

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

答案 3 :(得分:0)

感谢您的回复,我采用了另一种方式,并在不使用程序的情况下解决了问题。核心问题是使用各种列值计算日期,列值和转换为正确的格式。通过在select中使用大的“case-when”语句来解决它。

再次感谢...: - )