查找数据oracle中包含电子邮件的所有列

时间:2017-08-02 00:01:09

标签: oracle

我将开始道歉,因为我不知道如何将我的问题转化为文字。

我有一个包含大约15000列的数据库,我想查找存储在其中的电子邮件的每个列。我尝试过搜索专栏名称,但这并不是很有帮助,因为有很多变化。

我想做这样的事情

从all_tab_cols中选择column_name,其中包含'%@%。com%

等数据

这是在oracle数据库上,但我通过tableau访问数据。

谢谢, Aayush

澄清:我想找到其中包含电子邮件地址的每一列。

1 个答案:

答案 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;