En algunos casos, afortunadamente no demasiados, he tenido que buscar una cadena (normalmente algo relacionado con la configuración) en un esquema de la BD.
El asunto se complica cuando hay una cantidad de tablas ingente y además no hay forma de ponerse en contacto con el desarrollador, vamos un infierno.
Pues bueno para estos casos quiero compartir un script PL/SQL de cosecha propia (como casi todos los que pongo en el blog), que facilita el tema bastante:
DECLARE
sql_str VARCHAR2(1000);
sql_del VARCHAR2(1000);
cadena_buscar VARCHAR(200);
total_val number;
cursor c1 IS SELECT OWNER,TABLE_NAME,COLUMN_NAME,DATA_TYPE FROM dba_tab_columns WHERE owner='WL_VAPMGMT' AND DATA_TYPE IN ('CHAR','VARCHAR2');
BEGIN
cadena_buscar:='ceac7d09275562c6126a29405510e1ca';
FOR fila IN c1
LOOP
sql_str := 'SELECT COUNT(*) FROM '||fila.OWNER||'.'||fila.TABLE_NAME||' where '||fila.COLUMN_NAME||' like ''%'||cadena_buscar||'%''';
sql_del := 'DELETE FROM '||fila.OWNER||'.'||fila.TABLE_NAME||' where '||fila.COLUMN_NAME||' like '''||cadena_buscar||'''';
EXECUTE IMMEDIATE sql_str INTO total_val;
IF total_val>0 then
dbms_output.put_line(sql_str);
dbms_output.put_line(fila.OWNER||'.'||fila.TABLE_NAME||'.'||fila.COLUMN_NAME||' Aciertos '||total_val);
dbms_output.put_line(sql_del);
dbms_output.put_line('---');
end IF;
END LOOP;
END;
El PL/SQL busca dentro de todas las tablas del esquema WL_VAPMGMT (que hay que sustituirlo por el que venga al caso), la cadena asignada a la variable cadena_buscar.
Muestra en que tabla y columna se ha producido la coincidencia, cuantas y cual sería el DML para eliminar estas coincidencias.
Espero que os sea de utilidad…
Muchas gracias!, creo que es realmente útil.
Saludos
Buenas , Trato de usar el Scrip y me da el siguiente error.
ORA-01830: la máscara de formato de fecha termina antes de convertir toda la cadena de entrada
ORA-06512: en línea 13
Sugerencias?
Gracias
Saludos
Hernan
Sin más datos no sabría decirte.
Esto no busca dentro de vistas, que también forma parte de la base de datos
Una vista se apoya sobre un tabla, si se busca sobre las tablas es para tener la posibilidad de modificar los datos. Las vistas generalmente no permiten esto (algunas si).
FALLA POR : FROM dba_tab_columns : ERROR : TABLE OR VIEW DOES NOT EXIST
Debe ser porque el usuario con el que te has conectado no tiene permisos para acceder a dba_tab_columns.
esto ees por que no usa dba_tab… si no all_tab_columns