sql >> Base de Datos >  >> RDS >> Oracle

Busque una cadena dada en todos los campos de un esquema completo para Oracle

"TODAS LAS_TAB_COLUMNAS " es una tabla de sistema, tiene todos los tipos de datos de las columnas de la tabla, etc.

"USER_TAB_COLUMNS " es una tabla de sistema, tiene todos los tipos de datos de las columnas de la tabla, etc. (cuyo propietario es el usuario actual). (Gracias René)

Un ejemplo:

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

esta consulta generará table_name '' column_name'' y contará, si tiene columnas estándar y nombres de tablas, puede cambiar la consulta como IF columnas> 0, luego escribir una consulta UNION en bucle y devolver el cursor, o devolver una tabla,