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.

No hay comentarios:

Publicar un comentario