首先,我是Oracle的新手,所以我的問題可能很愚蠢。 但我會盡量清楚。某些列的`map`,避免重新計算參數
我有幾張表我想更新。每個結構都相同:第一個特殊列,然後是n
列,最後是n
列,這些列將以某種方式鏡像前面的n
。 (因此,表格將有2×n + 1列)。請注意,n的值會因表而異。
例如,對於一臺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));
我無法想象的東西,簡單的沒有一個優雅和高效的解決方案。在我看來,這是一個相當普遍的模式。
您可能想要了解有關標量子查詢緩存的內容。 [這裏](http://www.oracle.com/technetwork/issue-archive/2011/11-sep/o51asktom-453438.html)是Tom Kyte在這個主題上發表的一篇文章。 –