如何使用同一 table 中其他两列的串联更新列
How to update a column with concatenate of two other column in a same table
我有一个包含 3 列 a、b 和 c 的 table。我想知道如何通过连接每行中的其他两列来更新第三列的值。
before update
A B c
-------------
1 4
2 5
3 6
after update
A B c
-------------
1 4 1_4
2 5 2_5
3 6 3_6
如何在 Oracle 中执行此操作?
使用连接运算符||
:
update mytable set
c = a || '_' || b
或者更好的是,避免在插入或更新行时重新运行:
create view myview as
select *, a || '_' || b as c
from mytable
首先,您违反了规范化的规则。您必须重新考虑设计。如果您在 table 列中有值,那么要获得计算值,您只需要一个 select 语句以您想要的方式获取结果.存储计算值通常不是一个好主意,被认为是一个糟糕的设计。
无论如何,
既然你在 11g
,如果你真的想要一个计算列,那么我建议使用 VIRTUAL COLUMN 而不是手动更新列。 UPDATE 语句涉及很多 overhead。使用虚拟列会减少很多开销。此外,您将完全摆脱手动工作和那些代码行来进行更新。 Oracle 为您代劳。
当然,您将在虚拟列子句中使用相同的连接条件。
有点像,
Column_c varchar2(50) GENERATED ALWAYS AS (column_a||'_'||column_b) VIRTUAL
注意:它的使用有一定的限制。因此,请在实施之前参考文档。但是,对于 OP 提供的简单用例,虚拟列是最合适的。
更新 我做了一个小测试。几乎没有观察到。请阅读此 以更好地了解如何实施我的建议。
我有一个包含 3 列 a、b 和 c 的 table。我想知道如何通过连接每行中的其他两列来更新第三列的值。
before update
A B c
-------------
1 4
2 5
3 6
after update
A B c
-------------
1 4 1_4
2 5 2_5
3 6 3_6
如何在 Oracle 中执行此操作?
使用连接运算符||
:
update mytable set
c = a || '_' || b
或者更好的是,避免在插入或更新行时重新运行:
create view myview as
select *, a || '_' || b as c
from mytable
首先,您违反了规范化的规则。您必须重新考虑设计。如果您在 table 列中有值,那么要获得计算值,您只需要一个 select 语句以您想要的方式获取结果.存储计算值通常不是一个好主意,被认为是一个糟糕的设计。
无论如何,
既然你在 11g
,如果你真的想要一个计算列,那么我建议使用 VIRTUAL COLUMN 而不是手动更新列。 UPDATE 语句涉及很多 overhead。使用虚拟列会减少很多开销。此外,您将完全摆脱手动工作和那些代码行来进行更新。 Oracle 为您代劳。
当然,您将在虚拟列子句中使用相同的连接条件。
有点像,
Column_c varchar2(50) GENERATED ALWAYS AS (column_a||'_'||column_b) VIRTUAL
注意:它的使用有一定的限制。因此,请在实施之前参考文档。但是,对于 OP 提供的简单用例,虚拟列是最合适的。
更新 我做了一个小测试。几乎没有观察到。请阅读此