2011-03-04 58 views
6

是否有可能在每个表的每个字段中搜索Oracle中的特定值。我想在Oracle的所有表的所有列中搜索特定值11g

我想这样做,而无需使用任何程序..

我们能用查询办呢?

+1

可能重复的[在特定值的所有表中搜索所有字段(Oracle)](http://stackoverflow.com/questions/208493/search-all-fields-in-all-tables-for-a- specific-value-oracle) – 2011-03-04 12:49:08

+0

plz检查我的编辑.. – Royson 2011-03-04 13:21:53

+0

在我看来还是一个骗局 – 2011-03-04 14:19:11

回答

12

虽然它有点复杂,但您可以使用单个查询来完成。此查询将搜索所有CHAR和VARCHAR2列在当前模式的字符串'JONES'

select table_name, 
     column_name 
    from(select table_name, 
       column_name, 
       to_number(
       extractvalue(
        xmltype(
        dbms_xmlgen.getxml(
         'select count(*) c from ' || table_name || 
         ' where to_char(' || column_name || ') = ''JONES''' 
        ) 
        ), 
        'ROWSET/ROW/C' 
       ) 
       ) cnt 
      from (select utc.*, rownum 
        from user_tab_columns utc 
       where data_type in ('CHAR', 'VARCHAR2'))) 
where cnt >= 0 

请注意,这是施耐德洛朗的查询改编版,以count the rows in every table使用单个查询。

+0

像10g上的魅力工作也。但是,如果将最后一个'where cnt> = 0'变为'cnt> 0',它会给出错误。要解决这个问题,只需从外部查询中打包整个查询,如下所示: select x。* from(ABOVE QUERY)where x.cnt> 0 – 2012-03-13 09:19:26