首先,我是 Oracle 的新手,所以我的问题可能很愚蠢。不过,我会尽量说清楚。
我有几张表要更新。每个都有相同的结构:第一个特殊列,然后是n
列,最后n
是列,它们将以某种方式反映n
以前的列。(因此,该表将有 2×n+1 列)。请注意,n 的值会因一张表而异。
例如,对于 table TABLE_A
,我有以下命名列:
COL_A_0, COL_A_1, COL_A_2, ..., COL_A_n, COL_A_1_bis, COL_A_2_bis, ..., COL_A_n_bis
现在,我想做的就是这样。我有两个(确定性)函数f
和g
. 我想做以下事情:
UPDATE TABLE_A SET
COL_1_bis = f(g(COL_A_0), COL_A_1),
COL_2_bis = f(g(COL_A_0), COL_A_2),
...,
COL_n_bis = f(g(COL_A_0), COL_A_n);
现在,关键是计算g(COL_A_0)
速度很慢,我想避免为我必须更新的每一列(每一bis
列)重新计算它。请注意, 的值g(COL_A_0)
将逐行更改。此外,我希望将前面的方案应用于多个表,而不是所有表都具有相同的列数。例如,TABLE_A
将有 2×3+1 列,而TABLE_B
将有 2×5+1。
我的第一个想法是在字符串中生成命令,首先只计算一次 的值g(COL_A_0)
,然后EXECUTE IMMEDIATE
计算字符串。但它不适g(COL_A_0)
用于每一行的变化值。
完美的事情是能够写出类似的东西:
UPDATE TABLE_A SET
(COL_1_bis, ..., COL_n_bis) = map(f, g(COL_A_0), (COL_A_1, ..., COL_A_n));
我无法想象这么简单的事情没有优雅高效的解决方案。在我看来,这是一种很常见的模式。