create table Account(A_number number, B_number number, C_number, A_number_mask number as
GENERATED ALWAYS AS IDENTITY, B_number_mask number, C_number_mask )
插入后,表值为
A_number B_number C_number A_mask_number B_mask C_mask
10 100 200 1 NULL NULL
20 100 200 2 NULL NULL
30 101 201 3 NULL NULL
40 102 202 4 NULL NULL
50 103 203 5 NULL NULL
60 101 201 6 NULL NULL
现在我必须填充
- B_number_mask B_number
- C号C_number_mask
当我屏蔽或创建序列时,新列也应该具有父列中重复值的重复值。
输出应如下所示:
A_number B_number C_number A_mask_number B_mask C_mask
10 100 200 1 1 1000
20 100 200 2 1 1000
30 101 201 3 2 2000
40 102 202 4 3 3000
50 103 203 5 4 4000
60 101 201 6 2 2000
我必须将排序列提供给用户而不是父列。请随意使用序列的任何起始编号。
使用 ROW_NUMBER
创建序列。
SELECT A_number,
B_number,
ROW_NUMBER() OVER(ORDER BY RAND()) as A_number_mask,
ROW_NUMBER() OVER(PARTITION BY B_number ORDER BY RAND()) as B_number_mask
FROM Account
您可以在插入数据时使用标识列自动生成唯一编号
create table Account_New(A_number number,
B_number number,
A_number_mask BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH -1, INCREMENT BY -1)
B_number_mask BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 7000000000, INCREMENT BY 1)
)
只有两个选项来显示可能性 - 一个是生成负数,另一个是使用您未使用的序列。