【发布时间】:2015-11-03 02:33:21
【问题描述】:
我正在寻找在 oracle 所有表和列中搜索字符串/数字的解决方案。
我在网上查了一下,可以找到很多解决方案。
但是当我在 SQL Oracle 开发人员中执行以下解决方案时,它会创建匿名块。
谁能帮助我如何在 Oracle 中使用以下解决方案来获得结果。
DECLARE
match_count integer;
v_search_string varchar2(4000) := <<string you want to search for>>;
BEGIN
FOR t IN (SELECT owner, table_name, column_name FROM all_tab_columns) LOOP
EXECUTE IMMEDIATE
'SELECT COUNT(*) FROM '||t.owner || '.' || t.table_name||
' WHERE '||t.column_name||' = :1'
INTO match_count
USING v_search_string;
IF match_count > 0 THEN
dbms_output.put_line( t.owner || '.' || t.table_name ||' '||t.column_name||' '||match_count );
END IF;
END LOOP;
END;
/
请帮忙,因为我是 Oracle 的新手。
感谢您的建议
【问题讨论】:
-
我不确定您所说的“它会创建匿名块”是什么意思。匿名块不会存储在任何地方,因此像创建存储对象(如过程或函数)那样谈论“创建”它是没有意义的。你在执行匿名块吗?你看到任何结果了吗?您是否为您的会话启用了
dbms_output?您是否将实际要搜索的字符串放在“>”中?你有错误吗? -
@JustinCave:感谢您的回复。是的,我已经输入了要在数据库中搜索的字符串。我只是在 SQL Oracle 开发人员的 SQL 窗口中执行此操作,它向我显示创建了匿名块。所以这是我的查询我应该如何在 SQL Oracle 开发人员中执行?
-
消息到底是什么?您是否看到“PL/SQL 过程已成功完成。”?这表明匿名块已成功执行。正如我所说,匿名块不会像过程和函数这样的持久对象那样被创建。问题是您正在执行匿名块但没有看到来自
dbms_output的任何输出吗?如果是这样,我将把它作为我链接到的问题的副本关闭。
标签: oracle