Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle11g Oracle-使用#完全更新列长度?_Oracle11g_Sql Update - Fatal编程技术网

Oracle11g Oracle-使用#完全更新列长度?

Oracle11g Oracle-使用#完全更新列长度?,oracle11g,sql-update,Oracle11g,Sql Update,抱歉,如果这是一个愚蠢的问题,但我在网上任何地方都看不到答案,所以不确定这是否可行 我现在正在做一个项目,我必须销毁客户数据,我所说的销毁是指使客户无法识别 我有很多表,我需要创建一个批处理来更新带有#字符的某些字段,还有一些其他的只是为了清空它们 有没有办法让update语句可以用#来设置列的整个宽度,而不是指定每个宽度 例如,在一个名为CLIENT的表上,有一个名称列声明为VARCHAR2(10)。我目前正在这样做: UPDATE CLIENT C SET C.NAME = '#######

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

我现在正在做一个项目,我必须销毁客户数据,我所说的销毁是指使客户无法识别

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

有没有办法让update语句可以用#来设置列的整个宽度,而不是指定每个宽度

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

UPDATE CLIENT C SET C.NAME = '##########' WHERE C.ID = xxxxxx;
在我不必指定10的情况下,有没有办法做到这一点

更新客户端C SET C.NAME=ALL'#',其中C.ID=xxxxxx

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

谢谢你的帮助,
Mac

这可能是一种方法。此查询将为所有VARCHAR2列生成update语句,但您必须手动提供自己的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

这可能是一种方法。此查询将为所有VARCHAR2列生成update语句,但您必须手动提供自己的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
您可以使用regexp\u replace()

您可以使用regexp\u replace()


如果名字只有字母表,从列表中删除0-9。很棒的东西,非常有用而且干净。。我真的必须自学正则表达式。。谢谢教授,关于上述问题的另一个问题。如果上面的名字是“玛丽”,我会得到“###################”但不管名字有多长,我都可以完全把名字列成“#####”,就像帕特里克在下面提到的那样。如果名字只有字母表,就从列表中删除0-9。很棒的东西,真的有用而且干净。。我真的必须自学正则表达式。。谢谢教授,关于上述问题的另一个问题。如果上面的名字是“玛丽”,我会得到“######”,但无论如何,我都可以将“姓名”列完全填充为“#######”而不管名字有多长?在这种情况下,你可以按帕特里克在下面提到的那样添加所需数量的“#”。