Consultar un valor de campo en toda la BD

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Leonardo Carnicella
    Junior Member
    • ago
    • 23

    #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
  • vanesamacri
    Senior Member
    • jun
    • 146

    #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

    Comentario

    • Leonardo Carnicella
      Junior Member
      • ago
      • 23

      #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

      Comentario

      • mialma
        Junior Member
        • mar
        • 19

        #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.

        Comentario

        • Leonardo Carnicella
          Junior Member
          • ago
          • 23

          #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
          Editado por última vez por Leonardo Carnicella; 13/02/2019, 12:57:47.

          Comentario

          • mialma
            Junior Member
            • mar
            • 19

            #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 :-)

            Comentario

            Trabajando...