在Oracle的整个模式的所有字段中搜索给定字符串

时间:2011-04-06 06:09:42

标签: sql oracle

我们如何在Oracle的整个架构的所有字段中搜索给定字符串?

是否有一个sql脚本在Oracle中执行上述操作?如果有,怎么样?

我们可以通过任何其他脚本来完成吗?

2 个答案:

答案 0 :(得分:4)

ALL_TAB_COLUMNS”是一个systable,包含所有表格列数据类型等。

USER_TAB_COLUMNS”是一个systable,具有所有表列数据类型等(所有者是当前用户)。 (谢谢Rene)

示例:

 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并返回光标,或返回一个表,

答案 1 :(得分:0)

  

我们可以通过任何其他脚本来完成吗?

您可以将数据库作为文本转储到磁盘,然后使用grep