是否可以通过使用存储过程将整数列值从结果集中提取到局部变量中,在那里对其进行操作,然后将其写回结果集的列?
如果是这样,语法会是什么样子?
以下几行应该可以解决问题。
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 = ?
这种实现的缺点是它只对特定记录进行操作,但这可能是您想要实现的目标。
为什么不只在更新语句中进行操作?您无需将其加载到变量中、对其进行操作然后保存。
update TableName
SET TableColumnName=TableColumnName + 42 /* or what ever manipulation you want */
WHERE ID = ?
还,
@iSomeDataItem + 21 * 2
是相同的:
@iSomeDataItem + 42
函数的想法是一个不必要的额外步骤,除非以下大多数情况是正确的:
1) 你需要在很多地方使用这个计算 2) 计算很复杂 3) 计算可以改变
感谢您的回复,我采取了另一种方式并在不使用程序的情况下解决了问题。核心问题是使用各种列值计算日期,列值要转换为正确的格式。通过在选择中使用大的“case - when”语句解决了这个问题。
再次感谢... :-)
您正在寻找的可能更像是可以在 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)。
希望这可以帮助。