oracle sql查询以跨所有架构查找电子邮件地址
我试图通过搜索模式“@abc.de”识别数据库模式中的所有表和列,理想情况下,此练习是oracle sql查询以跨所有架构查找电子邮件地址,oracle,loops,plsql,recursive-query,Oracle,Loops,Plsql,Recursive Query,我试图通过搜索模式“@abc.de”识别数据库模式中的所有表和列,理想情况下,此练习是 使用电子邮件模式(@abc.de)识别特定表格和相关列 选取该列表并交叉验证电子邮件地址是否有效 不幸的是,第1点非常困难 在寻找和试图找到 SQL代码 SET SERVEROUTPUT ON DECLARE l_cmd VARCHAR2 (2000); l_found INTEGER; BEGIN FOR eachcol IN ( SELECT *
SET SERVEROUTPUT ON
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 = 'schema_name'
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 '%@abc%.de%' 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;
我得到下面的错误
Error report -
ORA-00911: invalid character
ORA-06512: at line 35
00911. 00000 - "invalid character"
*Cause: identifiers may not start with any ASCII character other than
letters and numbers. $#_ are also allowed after the first
character. Identifiers enclosed by doublequotes may contain
any character other than a doublequote. Alternative quotes
(q'#...#') cannot use spaces, tabs, or carriage returns as
delimiters. For all other contexts, consult the SQL Language
Reference Manual.
注意:我尝试了许多选项来获取电子邮件地址,但没有获得正确的查询逻辑,有什么建议吗?删除无用的
当其他人出现异常时。它隐藏了准确的错误点,因为第35行是RAISE
然后,显示您当前使用的表和列名-使用DBMS\u输出。为此,请将行置于循环的正后方
一旦遇到错误,过程将停止并显示引发错误的最后一个表/列。我想是这样的:
SQL> create table xxx ("!what ?" varchar2(10));
Table created.
你的代码以
DECLARE
*
ERROR at line 1:
ORA-00936: missing expression
ORA-06512: at line 35
这不完全是你得到的,但是-你自己会发现的。我不能,我没有你的桌子。删除无用的,当其他人出现异常时。它隐藏了准确的错误点,因为第35行是RAISE
然后,显示您当前使用的表和列名-使用DBMS\u输出。为此,请将行置于循环的正后方
一旦遇到错误,过程将停止并显示引发错误的最后一个表/列。我想是这样的:
SQL> create table xxx ("!what ?" varchar2(10));
Table created.
你的代码以
DECLARE
*
ERROR at line 1:
ORA-00936: missing expression
ORA-06512: at line 35
这不完全是你得到的,但是-你自己会发现的。我不能,我没有你的表。它不工作,你能更新代码吗?我遇到了其他错误,我无法调试看不到的错误。它不工作。请更新代码好吗?我遇到了其他错误,我无法调试看不到的错误。在我工作过的大多数系统中,循环模式中的每一个varchar2
列一次将花费超过一个人一生的时间。列名中真的没有线索吗?您可能还排除了太小而不能作为电子邮件地址的列-可能是a@b.cd
大约是电子邮件地址的最小值,因此您需要寻找6个或更多字符作为开始。@WilliamRobertson-我可以通过指定所需的列来明确细化,但为了确保识别DWH架构中的所有电子邮件,但现实主义似乎很难,而且会消耗大量时间,而且查询永远不会结束,并且会重新运行大量错误。我将看看在我工作过的大多数系统中,是否可以找到列,在模式中的每一个varchar2
列中循环一次要花费的时间超过人的一生。列名中真的没有线索吗?您可能还排除了太小而不能作为电子邮件地址的列-可能是a@b.cd
大约是电子邮件地址的最小值,因此您需要寻找6个或更多字符作为开始。@WilliamRobertson-我可以通过指定所需的列来明确细化,但为了确保识别DWH架构中的所有电子邮件,但现实主义似乎很难,而且会消耗大量的时间,查询永远不会结束,还会运行大量的错误,我会看看是否能找到列