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

前端 未结 16 2357
一整个雨季
一整个雨季 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:42

    Modifying the code to search case-insensitively using a LIKE query instead of finding exact matches...

    DECLARE
      match_count INTEGER;
      -- Type the owner of the tables you want to search.
      v_owner VARCHAR2(255) :='USER';
      -- Type the data type you're looking for (in CAPS). Examples include: VARCHAR2, NUMBER, etc.
      v_data_type VARCHAR2(255) :='VARCHAR2';
      -- Type the string you are looking for.
      v_search_string VARCHAR2(4000) :='Test';
    BEGIN
      dbms_output.put_line( 'Starting the search...' );
      FOR t IN (SELECT table_name, column_name FROM all_tab_cols where owner=v_owner and data_type = v_data_type) LOOP
        EXECUTE IMMEDIATE 
        'SELECT COUNT(*) FROM '||t.table_name||' WHERE LOWER('||t.column_name||') LIKE :1'
        INTO match_count
        USING LOWER('%'||v_search_string||'%');
        IF match_count > 0 THEN
          dbms_output.put_line( t.table_name ||' '||t.column_name||' '||match_count );
        END IF;
      END LOOP;
    END;
    

提交回复
热议问题