0

抱歉,如果这是一个愚蠢的问题,但我在网上的任何地方都看不到答案,所以不确定这是否可能。

我正在做一个项目,我必须销毁客户数据,而销毁我的意思是让客户无法识别。

我有很多表,我需要创建一个批处理来更新带有 # 字符的某些字段,而其他几个只是为了空白它们。

有没有办法有一个更新语句,你可以用#设置列的整个宽度,而不是指定每一个?

例如,假设在一个名为 CLIENT 的表上,我们有一个声明为 VARCHAR2(10) 的 NAME 列。我目前正在这样做:

UPDATE CLIENT C SET C.NAME = '##########' WHERE C.ID = xxxxxx;

有没有什么方法可以做到这一点,我不必指定 10 个 # 之类的?

UPDATE CLIENT C SET C.NAME = ALL '#' WHERE C.ID = xxxxxx;

只是有些字段是 4 个字符,有些是 9 个,有些是 10 个,有些是 20 个等。如果不可能,那就没有大戏了,但我只是认为如果可以做到,这将是一种更整洁的方法。

感谢您的帮助,Mac

4

2 回答 2

2

这可能是一种方法。此查询将为所有 VARCHAR2 列生成更新语句,但您必须手动提供自己的 WHERE 子句。

select 'update '||table_name||' set '||
listagg(column_name||'= RPAD(''#'', '||data_length||', ''#'')', ', ') within group (order by column_name)
from all_tab_columns
where table_name = 'CLIENT'
and data_type = 'VARCHAR2'
group by table_name
于 2013-08-28T16:55:37.853 回答
1

您可以使用 regexp_replace()。

update client 
set name = regexp_replace(name,'[A-Za-z0-9]','#') 
where c.id = xxxxxx;
于 2013-08-29T06:31:29.747 回答