【问题标题】:How to pass computed value for column1 onto column2 in update如何在更新中将 column1 的计算值传递到 column2
【发布时间】:2023-01-18 04:01:49
【问题描述】:

首先,我正在使用 plsql,并调整现有命令。我可能会从头开始做不同的事情。

我想做这样的事情,但这行不通。

UPDATE TABLE_NAME 
SET   COLUMN1 = FUNCTION1(...)
    , COLUMN2 = FUNCTION2(..., COLUMN1)
;

理想情况下,我想避免这样做

UPDATE TABLE_NAME 
SET   COLUMN1 = FUNCTION1(...)
    , COLUMN2 = FUNCTION2(..., FUNCTION1(...))
;

有没有办法实现这一点,也许是通过将 COLUMN1 的计算值存储到变量中? 例如,在 C 中,这样的事情是可能的。

COLUMN1 = VARIABLE_NAME = FUNCTION1(...)

或者也许通过位置引用它?这种语法不起作用,但我有一个模糊的想法,它可能是可能的。

UPDATE TABLE_NAME 
SET   COLUMN1 = FUNCTION1(...)
    , COLUMN2 = FUNCTION2(..., {1})
;

谢谢。

【问题讨论】:

  • 这(来自您的第一个查询):COLUMN2 = FUNCTION2(..., COLUMN1) - 实际上 - COLUMN2 = FUNCTION2(..., NEW_VALUE_OF_COLUMN1),对吧?不是“原始”(旧)COLUMN1 值。这就是您的第二个查询所建议的。如果是这样,不幸的是,我没有更好的主意 - 目前,我认为第二个查询(你想避免的那个)是这样做的方法。如果有人提出更好的建议,我会很高兴;我会密切关注这个问题,并希望能学到一些新东西。
  • 是的。我想要更好的方法COLUMN2 = FUNCTION2(..., NEW_VALUE_OF_COLUMN1)

标签: plsql


【解决方案1】:

如果您在 PL/SQL 中执行此操作,那么您可以调用函数,将返回值分配给变量,然后使用这些变量更新表。喜欢:

 lv_col1 := function1(...);
 lv_col2 := function2(...,lv_col1);

    update table
       set column1 = lv_col1,
        column2 = lv_col2

这样您就不必多次调用 function1。

【讨论】:

    猜你喜欢
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 2021-03-30
    • 2020-10-24
    相关资源
    最近更新 更多