通过使用存储过程,是否可以将结果集中的整型列值提取到本地变量中,在那里进行操作,然后将其写回结果集的列中?
如果是这样,语法会是什么样子?
通过使用存储过程,是否可以将结果集中的整型列值提取到本地变量中,在那里进行操作,然后将其写回结果集的列中?
如果是这样,语法会是什么样子?
以下类似的内容应该能起到作用。
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 = ?
这种实现方式的缺点是它只能在特定记录上运行,但这可能是您想要实现的。
你所寻找的可能更多地是用户自定义函数,它可以在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)。
希望这有所帮助。
感谢回复,我采用了另一种方法并且成功解决了问题,而不需要使用过程(procedure)。核心问题是使用各种列值计算日期,需要将列值转换为正确格式。通过在选择(select)中使用大量的“case-when”语句来解决。
再次感谢... :-)
为什么不在更新语句中进行操作?你不需要将它加载到变量中,进行操作,然后再保存。
update TableName
SET TableColumnName=TableColumnName + 42 /* or what ever manipulation you want */
WHERE ID = ?
也,
@iSomeDataItem + 21 * 2
与...一样:
@iSomeDataItem + 42
功能想法是一个不必要的额外步骤,除非以下大多数都为真:
1) you will need to use this calculation in many places 2) the calculation is complex 3) the calculation can change