Search All Fields In All Tables For A Specific Value (Oracle)

前端 未结 16 2078
一整个雨季
一整个雨季 2020-11-22 01:05

Is it possible to search every field of every table for a particular value in Oracle?

There are hundreds of tables with thousands of rows in some tables so I know th

16条回答
  •  逝去的感伤
    2020-11-22 01:46

    I know this is an old topic. But I see a comment to the question asking if it could be done in SQL rather than using PL/SQL. So thought to post a solution.

    The below demonstration is to Search for a VALUE in all COLUMNS of all TABLES in an entire SCHEMA:

    • Search a CHARACTER type

    Let's look for the value KING in SCOTT schema.

    SQL> variable val varchar2(10)
    SQL> exec :val := 'KING'
    
    PL/SQL procedure successfully completed.
    
    SQL> SELECT DISTINCT SUBSTR (:val, 1, 11) "Searchword",
      2    SUBSTR (table_name, 1, 14) "Table",
      3    SUBSTR (column_name, 1, 14) "Column"
      4  FROM cols,
      5    TABLE (xmlsequence (dbms_xmlgen.getxmltype ('select '
      6    || column_name
      7    || ' from '
      8    || table_name
      9    || ' where upper('
     10    || column_name
     11    || ') like upper(''%'
     12    || :val
     13    || '%'')' ).extract ('ROWSET/ROW/*') ) ) t
     14  ORDER BY "Table"
     15  /
    
    Searchword  Table          Column
    ----------- -------------- --------------
    KING        EMP            ENAME
    
    SQL>
    
    • Search a NUMERIC type

    Let's look for the value 20 in SCOTT schema.

    SQL> variable val NUMBER
    SQL> exec :val := 20
    
    PL/SQL procedure successfully completed.
    
    SQL> SELECT DISTINCT SUBSTR (:val, 1, 11) "Searchword",
      2    SUBSTR (table_name, 1, 14) "Table",
      3    SUBSTR (column_name, 1, 14) "Column"
      4  FROM cols,
      5    TABLE (xmlsequence (dbms_xmlgen.getxmltype ('select '
      6    || column_name
      7    || ' from '
      8    || table_name
      9    || ' where upper('
     10    || column_name
     11    || ') like upper(''%'
     12    || :val
     13    || '%'')' ).extract ('ROWSET/ROW/*') ) ) t
     14  ORDER BY "Table"
     15  /
    
    Searchword  Table          Column
    ----------- -------------- --------------
    20          DEPT           DEPTNO
    20          EMP            DEPTNO
    20          EMP            HIREDATE
    20          SALGRADE       HISAL
    20          SALGRADE       LOSAL
    
    SQL>
    

提交回复
热议问题