我有一个包含3列a,b和c的表。我想知道如何用每行中其他两个列的连接来更新第三列的值。
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中做到这一点?
首先,您违反了规范化规则。您必须重新考虑设计。如果表列中有值,则要获取计算值,您只需执行一条select语句即可以所需方式获取结果。存储计算值通常不是一个好主意,并且被认为是一个错误的设计。
反正,
由于您在上11g
,如果您确实要有一个计算列,那么我建议您使用虚拟列,而不是手动更新该列。UPDATE语句涉及很多开销。使用虚拟列将减少很多开销。此外,您将完全摆脱手工工作和执行更新的那些代码行。Oracle为您完成工作。
当然,您将在虚拟列子句中使用相同的串联条件。
就像是,
Column_c varchar2(50) GENERATED ALWAYS AS (column_a||'_'||column_b) VIRTUAL
注意:对其使用有某些限制。因此,在实施之前,请先参考文档。但是,对于OP提供的简单用例,虚拟列是很合适的。
更新我做了一个小测试。几乎没有观察到。请阅读此问题,以更好地理解如何实施我的建议。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句