我将开始道歉,因为我不知道如何将我的问题转化为文字。
我有一个包含大约15000列的数据库,我想查找存储在其中的电子邮件的每个列。我尝试过搜索专栏名称,但这并不是很有帮助,因为有很多变化。
我想做这样的事情
从all_tab_cols中选择column_name,其中包含'%@%。com%
等数据这是在oracle数据库上,但我通过tableau访问数据。
谢谢, Aayush
澄清:我想找到其中包含电子邮件地址的每一列。
答案 0 :(得分:0)
这只会找到以@ something.com结尾的电子邮件地址,但您正在寻找类似下面的内容。还有其他关于查找电子邮件地址的帖子,这很难做到:
DECLARE
l_cmd VARCHAR2 (2000);
l_found INTEGER;
BEGIN
FOR eachcol IN ( SELECT *
FROM all_tab_cols a
WHERE a.data_type = 'VARCHAR2'
AND owner = 'SEARCHSCHEMANAME'
ORDER BY table_name, column_name)
LOOP
l_cmd :=
'select count(*) c from '
|| eachcol.owner
|| '.'
|| eachcol.table_name
|| ' where '
|| LOWER (eachcol.column_name)
|| q'[ LIKE '%@%.com%' AND ROWNUM = 1]';
EXECUTE IMMEDIATE l_cmd INTO l_found;
IF l_found > 0
THEN
DBMS_OUTPUT.put_line (
RPAD (eachcol.owner || '.' || eachcol.table_name || '.' || eachcol.column_name, 92)
|| ' may contain email addresses'
);
END IF;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (l_cmd);
DBMS_OUTPUT.put_line (SQLERRM);
RAISE;
END;