Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Consulta de registro en BD

Estas en el tema de Consulta de registro en BD en el foro de Oracle en Foros del Web. Buen dia estimados: el presente es para consultarles lo siguiente: quiero crear un script que cuando yo le ingrese como parametro o variable parte de ...
  #1 (permalink)  
Antiguo 17/07/2012, 21:48
Avatar de Pablo Cesar  
Fecha de Ingreso: septiembre-2007
Mensajes: 54
Antigüedad: 17 años, 2 meses
Puntos: 0
Consulta de registro en BD

Buen dia estimados:
el presente es para consultarles lo siguiente:
quiero crear un script que cuando yo le ingrese como parametro o variable parte de un registro cualquiera, me liste en que tablas y campos estan alojados
ejemplo
variable %abcd%
respuesta esta en la(s) tabla(s) TTT y el (los) campo(s) CC

saludos y gracias por su apoyo
  #2 (permalink)  
Antiguo 18/07/2012, 00:26
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 17 años, 5 meses
Puntos: 43
Respuesta: Consulta de registro en BD

Joder, no pides tu nada.

Si te entendido bien ( hoy estoy algo espeso ), lo que quieres es crear un script al que por ejemplo le pases pepe como parámetro y te saque todos los campos de todas las tablas y el nombre de las tablas en los que se encuentre la cadena pepe, por ejemplo : peperoni, pepe, repepero………………………

Lo primero que se me ocurre es que te montes un cursor sobre ALL/DBA_TAB_COLUMNS y saques el nombre de la tabla y del campo donde el DATA_TYPE = VARCHAR2 ( Asumo que le pasas un string ), sobre eso te montas un sql dinamico y haces algo parecido a
SELECT COUNT(*)
FROM CURSOR.NOMBRE_DE_TABLA
WHERE CURSOR.NOMBRE DE CAMPO LIKE ‘%STRING QUE LE HAS PASADO COMO PARAMETRO%’

Y lo metes dentro de una variable, ahora accedes a esa variable y si tiene contenido sabes que ha habido una ocurrencia y metes CURSOR.NOMBRE_DE_TABLA y el CURSOR.NOMBRE DE CAMPO en una tabla física o en una tabla pl.

Asume que ese proceso va a ser muy largo y costoso ya que tiene que consultar en todos los campos varchar2 de todas las tablas y se las tiene que recorrer enteras N veces ( aquí no te van a funcionar los índices ). No se cuantas tablas tienes, pero para que te hagas una idea, en nuestra BBDD de Producción para 1948 tablas, tenemos 12512 campos que son varchar2…….. para nosotros sería imposible hacerlo, con el volumen de datos que tenemos nos tardaría meses……………….
  #3 (permalink)  
Antiguo 18/07/2012, 05:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Consulta de registro en BD

Muy bonito el pedido, pero absolutamente impráctico.
Me parece que lo que quieres es ahorrar tiempo en crear los SP específicos para analizar la data, y hacer un sistema innecesariamente flexible, como si de base, no supieras en qué tablas esa información debería guardarse.
¿En qué contexto de qué sistema puedes necesitar algo tan antiperformántico?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 19/07/2012, 20:26
Avatar de Pablo Cesar  
Fecha de Ingreso: septiembre-2007
Mensajes: 54
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Consulta de registro en BD

Buenas Noches, tienes mucha razón siempre y cuando esto se lleve a un sistema real nunca tendria buen performance
, pero lo que estoy haciendo es solo realizar consultas en una BD oracle migrada con algunos datos de prueba que por cierto tiene tablas con nombres raros y bueno por el momento no tengo el diccionario de datos, pero podria ubicar una tabla especifica por su contenido. es por eso que se me ocurria eso ya que la bd no tiene demasiados datos.

ahora no se si habrá alguna otra forma de realizar dicha consulta

saludos
  #5 (permalink)  
Antiguo 19/07/2012, 20:34
Avatar de Pablo Cesar  
Fecha de Ingreso: septiembre-2007
Mensajes: 54
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Consulta de registro en BD

Gracias por tu respuesta , pondré en practica tu aporte.
ahora como mencionabas en un BD de produccion realizar esto , nunca acabo.
pero solo quiero realizar esto en una BD con data migrada con pocos datos

saludos y muchas gracias
  #6 (permalink)  
Antiguo 20/07/2012, 09:38
 
Fecha de Ingreso: junio-2010
Ubicación: Temuco, Chile
Mensajes: 20
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: Consulta de registro en BD

Con este loop puedes hacer lo que buscas, espero te funcione.

Código:
declare 
v_sql varchar2 (1000);
v_salida number;
begin 
for c1 in (select * from all_tab_columns where owner ='OWNER_TABLA')
loop 
if c1.data_type = 'VARCHAR2' then
v_sql := 'select count(*) from '||c1.table_name||' where  '||c1.column_name||' like '||chr(39)||'%abcd%'||chr(39);

execute immediate v_sql into v_salida;

if v_salida > 0 then
dbms_output.put_line(c1.table_name);
end if;

end if;
end loop;
end;

Etiquetas: bd, registro, tabla, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:31.