通过使用存储过程,是否有可能将结果集中的整数列值提取到局部变量中,在那里操作它然后将其写回结果集的列?
如果是这样,语法会是什么样的?
答案 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”语句来解决它。
再次感谢...: - )