Function 使用将另一列数据作为输入的函数更改列数据

Function 使用将另一列数据作为输入的函数更改列数据,function,plsql,calculated-columns,Function,Plsql,Calculated Columns,这是我的问题。我有一个包含多个列的表。我不得不将其匿名化(使用专用工具,我不会详细说明)。现在,问题是我有一列,比如说B,它直接依赖于另一列,比如说a。我加密了a,所以我需要重新计算整个B列,比如B中的所有B,a中的所有B 示例:假设我使用下表 A | B ------- 2 | 3 14 | 2 6 | 1 22 | 9 10 | 13 列A的所有值都已加密,但B保持不变。现在我需要应用,例如,这个函数 create or replace function correct_

这是我的问题。我有一个包含多个列的表。我不得不将其匿名化(使用专用工具,我不会详细说明)。现在,问题是我有一列,比如说B,它直接依赖于另一列,比如说a。我加密了a,所以我需要重新计算整个B列,比如B中的所有B,a中的所有B

示例:假设我使用下表

A  |  B
-------
2  |  3
14 |  2
6  |  1
22 |  9
10 |  13
列A的所有值都已加密,但B保持不变。现在我需要应用,例如,这个函数

create or replace function correct_b_column(input number) return number is
begin
    return input * input
end
对整个B列进行加密,以确保对于a中的所有a,B中的B,即使在对a列进行加密后,我仍然有B=a²


如何实现这一点?

您没有指出您拥有的Oracle版本,但假设11gR1或更高版本,最好的方法就是将列B创建为

如果B的推导很复杂,那么可以使用函数
这保证了B总是以A的形式设置。请参阅

create table vir_col_b ( a integer 
                       , b integer generated always as ( a*a)  );