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

Posted

技术标签:

【中文标题】将局部变量的内容写回结果集列?【英文标题】:Writing the content of a local variable back to the resultset column? 【发布时间】:2009-02-11 07:58:25 【问题描述】:

是否可以通过使用存储过程从结果集中获取整数列值到局部变量中,在那里对其进行操作,然后将其写回结果集的列?

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

【问题讨论】:

【参考方案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 = ?

这种实现的缺点是它只对特定记录进行操作,但这可能是您想要实现的目标。

【讨论】:

【参考方案2】:

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

希望这会有所帮助。

【讨论】:

【参考方案3】:

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

再次感谢... :-)

【讨论】:

【参考方案4】:

为什么不直接在更新语句中进行操作呢?您无需将其加载到变量中、对其进行操作然后保存。

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

还有,

@iSomeDataItem + 21 * 2

等同于:

@iSomeDataItem + 42

函数的想法是一个不必要的额外步骤,除非以下大部分是正确的:

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

【讨论】:

以上是关于将局部变量的内容写回结果集列?的主要内容,如果未能解决你的问题,请参考以下文章

python怎么将局部变量的值传递给全局变量

JavaSE7基础 类中的成员方法 局部变量和成员变量的变量名相同时,方法将使用局部变量

将局部变量更改为全局变量不起作用

如何在缓存结果时更新非局部变量?

局部变量和全局变量

将堆栈用于局部变量的想法是啥?