En el siguiente trozo de PL/SQL seleccionamos en una primera consulta todas las tablas y columnas donde podría encontrarse el literal que buscamos. Filtramos por el esquema al que estamos conectados (USER) o el que deseemos, tipo de dato de la columna o una longitud mínima, calculada con el literal de mayor longitud que hemos podido encontrar. Sin embargo para el literal a comparar recomendamos que sea lo más corto posible a fin de aligerar la operación de comparación.
Posteriormente en un bucle, para cada columna y tabla encontrada, se realiza una búsqueda para encontrar un registro que cumpla con nuestro literal.
set serveroutput on; DECLARE match_count integer; v_search_string varchar2(100) := 'Civilization... solo un turno más'; BEGIN FOR t IN (SELECT owner, table_name, column_name FROM all_tab_columns WHERE owner = USER and DATA_TYPE = 'VARCHAR2' and DATA_LENGTH >= 37 ) LOOP EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM '||t.owner || '.' || t.table_name|| ' WHERE '||t.column_name||' = :1' INTO match_count USING v_search_string; IF match_count > 0 THEN dbms_output.put_line( t.owner || '.' || t.table_name ||' '||t.column_name||' '||match_count ); END IF; END LOOP; dbms_output.put_line('Fin'); END; /