我是Oracle和DB2编程的新手,我有一个问题。我需要屏蔽一个数据类型为BIGING的字段。但是当我尝试使用regexp_replace执行查询时,我遇到了以下错误行:SQLCODE= -420,SQLSTATE=22018。有没有其他方法可以替代用于BIGING的regexp_replace?多谢了!
wkyowqbh1#
您可以使用下一个代码(Oracle),将除开头和结尾以外的所有数字替换为零,从而对整数进行“掩码”:
select N, -- source number FLOOR(N/POWER(10, FLOOR(LOG(10, N)))) * POWER(10, FLOOR(LOG(10, N))) + MOD(N, 10) MASKED from a;
run sql online
lokaqttq2#
根据Db2的平台和版本,您可能会考虑使用CREATE MASK(如果可用)。这将确保数据始终被屏蔽,而无需在每个应用程序中都这样做。快速搜索似乎表明Oracle也有类似的支持,但他们称之为Redaction。Oracle中的掩码似乎与子集化和将数据从生产导出到DEV/TEST有关。您真的需要一个同时适用于两个RDBM的解决方案吗?如果你真的想自己滚动,你需要提供一些你想返回的屏蔽值的例子。
CREATE MASK
编辑
以下是代码的一部分。PK_PERSON的数据类型为BIGINT。更新人员。T_PERSON集合PK_PERSON = REGEXP_REPLACE(PK_PERSON,'[0-9]','*'),其中PK_PERSON在('117888')中这是行不通的,你不能将BIGINT列设置为字符串。屏蔽也不是这样工作的。屏蔽通常是指从DB中读取数据时发生的过程。
2条答案
按热度按时间wkyowqbh1#
您可以使用下一个代码(Oracle),将除开头和结尾以外的所有数字替换为零,从而对整数进行“掩码”:
run sql online
lokaqttq2#
根据Db2的平台和版本,您可能会考虑使用
CREATE MASK
(如果可用)。这将确保数据始终被屏蔽,而无需在每个应用程序中都这样做。快速搜索似乎表明Oracle也有类似的支持,但他们称之为Redaction。Oracle中的掩码似乎与子集化和将数据从生产导出到DEV/TEST有关。
您真的需要一个同时适用于两个RDBM的解决方案吗?
如果你真的想自己滚动,你需要提供一些你想返回的屏蔽值的例子。
编辑
以下是代码的一部分。PK_PERSON的数据类型为BIGINT。更新人员。T_PERSON集合PK_PERSON = REGEXP_REPLACE(PK_PERSON,'[0-9]','*'),其中PK_PERSON在('117888')中
这是行不通的,你不能将BIGINT列设置为字符串。屏蔽也不是这样工作的。屏蔽通常是指从DB中读取数据时发生的过程。