【发布时间】:2011-04-06 06:09:42
【问题描述】:
我们如何在 Oracle 的整个架构的所有字段中搜索给定的字符串?
在 Oracle 中是否有执行上述操作的 sql 脚本?如果是,怎么做?
我们可以通过任何其他脚本来完成吗?
【问题讨论】:
我们如何在 Oracle 的整个架构的所有字段中搜索给定的字符串?
在 Oracle 中是否有执行上述操作的 sql 脚本?如果是,怎么做?
我们可以通过任何其他脚本来完成吗?
【问题讨论】:
“ALL_TAB_COLUMNS”是一个系统表,具有所有表列数据类型等。
“USER_TAB_COLUMNS”是一个系统表,具有所有表列数据类型等(所有者是当前用户)。 (感谢雷内)
一个例子:
SET SERVEROUTPUT ON SIZE 100000 -- maybe you have a lot of table and columns
DECLARE
matches INTEGER;
BEGIN
FOR columns IN (SELECT table_name, column_name FROM user_tab_columns where data_type = 'VARCHAR2') LOOP
EXECUTE IMMEDIATE
'SELECT COUNT(*) FROM '||t.table_name||' WHERE instr('||t.column_name||' , :1) > 0'
INTO matches
USING 'What you search';
IF matches > 0 THEN
dbms_output.put_line( t.table_name ||' '||t.column_name||' '||matches );
END IF;
END LOOP;
END;
/
此查询将输出 table_name '' column_name'' 和计数,如果您有标准列和表名,您可以将查询更改为 IF 列 > 0 然后在循环中编写查询 UNION 并返回游标,或者返回一个表,
【讨论】:
我们可以通过任何其他脚本来完成吗?
您可以将数据库作为文本转储到磁盘,然后使用grep。
【讨论】: