English 中文(简体)
将本地变量的内容写回结果集列?
原标题:
  • 时间:2009-02-11 07:58:25
  •  标签:

通过使用存储过程,是否可以将结果集中的整型列值提取到本地变量中,在那里进行操作,然后将其写回结果集的列中?

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

问题回答

以下类似的内容应该能起到作用。

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





相关问题
热门标签