Cómo buscar una cadena de texto en todas las tablas y todos los campos de una base de datos Oracle.

Hola Amig@s,

Si necesitamos buscar una cadena en una base de datos Oracle, por ejemplo un texto que se llame PEPE, podemos hacerlo con el siguiente procedimiento.

DECLARE
      match_count INTEGER;
    BEGIN
      FOR t IN (SELECT owner, table_name, column_name
                  FROM all_tab_columns
                  WHERE owner='USUARIOBBDD' and data_type LIKE '%CHAR%') LOOP

        EXECUTE IMMEDIATE
          'SELECT COUNT(*) FROM ' || t.owner || '.' || t.table_name ||
          ' WHERE '||t.column_name||' = :1'
          INTO match_count
          USING 'CADENAABUSCAR';

        IF match_count > 0 THEN
          dbms_output.put_line( t.table_name ||' '||t.column_name||' '||match_count );
        END IF;

      END LOOP;

    END;

Donde las variables a reemplazar son:

USUARIOBBDD: el nombre del usuario de bbdd que contiene las tablas.
CADENAABUSCAR: El texto que necesitamos encontrar en todas las tablas.

Si hay valores encontrados, esto generará una salida al DBMS.

Espero que les resulte útil.
Un saludo.
Share on Google Plus
    Blogger Comment

0 comentarios: