#1
|
|||
|
|||
Consultar un valor de campo en toda la BD
Saludos expertos,
en esta ocasión tengo una duda, que le he hecho a muchos programadores ABAP, todos me han dicho que NO es posible, por ende pruebo dejar la consulta por aqui. Es posible a través de algúna función, clase o de alguna manera, agregar en un report un parametro en el que el usuario escoja un dominio por ejemplo BUKRS, un valor del mismo por ejemplo BUKRS = 0001, y obtener de esta forma en que tablas transparentes de la BD se encuentra este registro BUKRS ? solo parea los campos bajo el dominio BUKRS. Sé que es posible, conocer en que tablas esta el dominio, y con que nombres de campos y si son independientes de mandante y que tipo de tablas son, (Si transparentes, Pool, Cluster etc) pero, Es posible conocer en que tablas de la BD se encuentra un valor determinado para un dominio seleccionado ? De antemano, mil gracias, Leo |
#2
|
|||
|
|||
Hola.
Sí, entiendo que es posible. La información de los campos de las tablas se encuentra almacenada en alguna tabla. A partir de allí, se podría obtener el listado de las tablas que contengan al campo relevante y consultarlas en forma dinámica, creando variables y tipos de datos en tiempo de ejecución en un reporte ejecutable. En la teoría, sí, es posible. Lo que no me queda en claro es cómo pueda llegar a responder el sistema en cuestiones de performance. Un saludo. Iván |
#3
|
|||
|
|||
Hola Ivan, gracias por tu respuesta.
Las tablas DD03L y DD02L son útiles para conocer en que tablas se deberá buscar el registro y cuales de esas tablas son transparentes, por ahi todo bien. Pero tienes alguna idea de como poder consultar las tablas por valor ? es decir, que mi report me diga todas las tablas que almacenan el BUKRS 0001, por ejemplo, siempre y cuando sean campos que pertenezcan obviamente al dominio BUKRS y que sean tablas transparentes. Con respecto al Performance, tienes mucha razón para algunos dominios la consulta podría ser critica, sin embargo bien podría guardarse el resultado en alguna tabla Z y ejecutarse no online sino en Background Gracias de nuevo |
#4
|
|||
|
|||
Algo asi
No te puede valer algo asi :
REPORT ZZZZZ. parameters DOMNAME type DOMNAME. parameters c(80). data l_table type dd03l occurs 0 with header line. data l_where(80). data l_dd02l type dd02l. data l_tab(80). select * into table l_table from DD03L where domname = domname. loop at l_table. select single * into l_dd02l from DD02L where TABNAME = l_table-TABNAME and tabclass = 'TRANSP'. check sy-subrc = 0. concatenate l_table-fieldname '=' c into l_where separated by space. select single (l_table-fieldname) into l_tab from (l_table-TABNAME) where (l_where). if sy-subrc <> 0. write :/ l_table-TABNAME. endif. endloop. |
#5
|
|||
|
|||
Me ayuda mucho mialma. Gracias !!!
Lo que no entiendo es por que declaras C como parámetro ? que debería ingresar el usuario allí ? no debería ser más bien una variable ? Segun entiendo con mis básicos conicimientos de ABAP, el Programa busca las tablas Transparentes asociados al Dominio que se guarda en el parametro de búsqueda, cierto ? o estoy dejando pasar algo? Gracias una vez más Saludos, Leo Úlima edición por Leonardo Carnicella fecha: 13/02/19 a las 12:57:47. |
#6
|
|||
|
|||
respuesta
C es el string a buscar y DOMNAME es el dominio .
Sacamos todas las tablas que tienen el dominio : select * into table l_table from DD03L where domname = domname. PAra cada tabla: Comprobamos que es una tabla trasnparente: select single * into l_dd02l from DD02L where TABNAME = l_table-TABNAME and tabclass = 'TRANSP'. Montamos el where dinamico: concatenate l_table-fieldname '=' c into l_where separated by space. HAcemos una select: select single (l_table-fieldname) into l_tab from (l_table-TABNAME) where (l_where). si sy-subrc = 0 esta en la tabla, si no , no :-) |
Herramientas | Buscar en Tema |
Desplegado | |
|
|