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

Posted

技术标签:

【中文标题】使用将另一列数据作为输入的函数更改列数据【英文标题】:Change a column data with a function that takes another column data as input 【发布时间】:2021-04-01 07:19:19 【问题描述】:

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

示例:假设我使用下表

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²。

我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

您没有说明您拥有哪个版本的 Oracle,但假设 11gR1 或更高版本,最好的方法是将 B 列创建为 virtual column。

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

如果 B 的推导很复杂,则可以使用函数。 这保证了 B 总是根据 A 设置的。请参阅 example。

【讨论】:

以上是关于使用将另一列数据作为输入的函数更改列数据的主要内容,如果未能解决你的问题,请参考以下文章

PySpark - 将另一列的值作为 spark 函数的参数传递

如何对一列执行 pandas groupby 操作,但将另一列保留在结果数据框中

Spark scala 按一列分组,将另一列分成列表

在另一列之后添加列

jquery datatable - 如何使用渲染函数从另一列获取数据

Kendo UI:更新一列数据以更改另一列中的值