sql >> Database >  >> RDS >> Oracle

Zoek naar een gegeven string in alle velden van een heel schema voor Oracle

"ALL_TAB_COLUMNS " is een systable, heb alle tabelkolommen gegevenstype enz.

"USER_TAB_COLUMNS " is een systable, heb alle tabelkolommen gegevenstype enz. (welke eigenaar is de huidige gebruiker). (Bedankt Rene)

Een voorbeeld:

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

deze query zal table_name '' column_name'' uitvoeren en tellen, als u standaard kolom- en tabelnamen heeft, kunt u de query wijzigen als IF kolommen> 0 en vervolgens een query UNION in lus schrijven en de cursor retourneren, of een tabel retourneren,



  1. PHP, pagina vernieuwen bij invoegen

  2. Door de gebruiker gedefinieerde variabele als alias MySQL v8.0 werkt niet

  3. Hoe voorwaardelijk UPDATE/INSERT na DELETE die geen rijen vindt?

  4. psycopg2 en oneindig python-script