sql >> Databasteknik >  >> RDS >> Oracle

Sök efter en given sträng i alla fält i ett helt schema för Oracle

"ALLA_TAB_COLUMNS " är en systable, har alla tabellkolumner datatyp etc.

"USER_TAB_COLUMNS " är en systable, har alla tabellkolumner datatyp etc (vilken ägare är nuvarande användare). (Tack Rene)

Ett exempel:

 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;
    /

den här frågan matar ut tabellnamn '' kolumnnamn'' och räknas, om du har standardkolumn- och tabellnamn kan du ändra fråga som IF-kolumner> 0 och sedan skriva en fråga UNION i loop och returnera markören, eller returnera en tabell,



  1. Få tillgång till experternas syn på 2020 MVP Summit

  2. Bästa praxis för att skapa SQL SELECT-frågor medan du hanterar potentiella odefinierade värden

  3. Räkna fält med samma värde

  4. Guide till designdatabas för sociala nätverkssystem i MySQL