Select * From Up To 1 Rows

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • budista1
    Senior Member
    • sep
    • 154

    #1

    Select * From Up To 1 Rows

    Hola Foro,

    qué diferencia hay entre un select single y un
    SELECT * FROM UP TO 1 ROWS?

    esta sentencia, ser un select end select me parece obsoleta,
    cómo la puedo actualizar?
    SELECT * FROM VAKPA UP TO 1 ROWS
    WHERE KUNDE = T_CU-KUNNR
    AND PARVW = 'AG'
    AND AUART = 'PVA'
    AND VKORG = T_CU-VKORG
    AND VTWEG = T_CU-VTWEG
    AND SPART = T_CU-SPART
    ORDER BY VBELN DESCENDING.
    ENDSELECT.

    MUCHAS GRACIAS
  • kibo
    Senior Member
    • may
    • 177

    #2
    SELECT * FROM VAKPA UP TO 1 ROWS
    into table it_vakpa
    WHERE KUNDE = T_CU-KUNNR
    AND PARVW = 'AG'
    AND AUART = 'PVA'
    AND VKORG = T_CU-VKORG
    AND VTWEG = T_CU-VTWEG
    AND SPART = T_CU-SPART
    ORDER BY VBELN DESCENDING.

    read table it_vakpa into wa_vakpa index 1.




    Esa sentencia intenta guardar la registro del vbeln mas alto (por eso lo ordena) usa el endselect porque si bien vos vos solo buscas 1 registro, la sentencia te obliga a guardarlo en una tabla interna...


    De esta manera que te digo yo, tendrias en wa_vakpa el dato que estas buscando
    http://diariotitular.com/contacto/

    Comentario

    • txuski84
      Junior Member
      • dic
      • 22

      #3
      El "SELECT SINGLE" sirve para hacer una consulta cuando tienes los campos claves, de tal forma que te devolverá solo un registro. Esté registro podrás guardarlo en una estructura, o si por el contrario deseas solo un campo, podrás coger el campo deseado y guardarlo en una variable.

      El "UP TO 1 ROWS" se utiliza cuando haces una consulta pero no accedes con toda la clave, con lo que dicha consulta te devolverá varios registros o lineas. Si de todas estas lineas recogidas solo te interesa la 1º, utilizarás esta sentencia. Por ejemplo si quieres recoger las 5 primeras lineas, pondrás UP TO 5 ROWS,...


      Espero haberte aclarado un poco más.
      --- Analista Programador ABAP IV ---

      Comentario

      • DCErick
        Moderator
        • mar
        • 1090

        #4
        El SELECT SINGLE no se puede ordenar, el SELECT ENDSELECT si.
        -------------------
        ¿Dudas para descargar manuales? Ver este tema -> Cómo descargar manuales de la sección "Descargas" ?

        Comentario

        • Siem
          Member
          • jul
          • 33

          #5
          Originalmente publicado por DCErick
          El SELECT SINGLE no se puede ordenar, el SELECT ENDSELECT si.
          Claro y contundente +1

          Comentario

          • txuski84
            Junior Member
            • dic
            • 22

            #6
            Según el Best practice hay que evitar en la medida de lo posible utilizar el Select ... EndSelect, ya que es peor.
            --- Analista Programador ABAP IV ---

            Comentario

            • Siem
              Member
              • jul
              • 33

              #7
              Originalmente publicado por txuski84
              Según el Best practice hay que evitar en la medida de lo posible utilizar el Select ... EndSelect, ya que es peor.
              Hay que evitarlo porque tienes la base de datos abierta mientras dure el bucle, pero aqui solo te traes un registro y cierras. Otra cosa es que no sea aconsejable hacer el order by, porque haces trabajar a la base de datos, y eso si que lo puedes cambiar por un sort a tu tabla interna, pero entonces te tienes que traer todos los registros que cumplan tu condicion, lo que conlleva gasto de ancho de banda. Cada cosa tiene sus pros y sus contras. Y para gustos los colores.

              Espero que te haya servido de algo mi aclaración. Yo he visto las dos tecnicas en la misma empresa.

              Comentario

              • txuski84
                Junior Member
                • dic
                • 22

                #8
                Originalmente publicado por Siem
                Hay que evitarlo porque tienes la base de datos abierta mientras dure el bucle, pero aqui solo te traes un registro y cierras. Otra cosa es que no sea aconsejable hacer el order by, porque haces trabajar a la base de datos, y eso si que lo puedes cambiar por un sort a tu tabla interna, pero entonces te tienes que traer todos los registros que cumplan tu condicion, lo que conlleva gasto de ancho de banda. Cada cosa tiene sus pros y sus contras. Y para gustos los colores.

                Espero que te haya servido de algo mi aclaración. Yo he visto las dos tecnicas en la misma empresa.

                Totalmente de acuerdo con todo

                Espero no irme por las ramas... pero para lo que comentas de que no es aconsejable hacer un ORDER BY y es mejor un SORT de la tabla interna... creo que es aun mejor que la tabla interna sea SORTED, te ahorras el ordenarla y al hacer la consulta se ordena automáticamente.
                --- Analista Programador ABAP IV ---

                Comentario

                • Siem
                  Member
                  • jul
                  • 33

                  #9
                  Originalmente publicado por txuski84
                  Totalmente de acuerdo con todo

                  Espero no irme por las ramas... pero para lo que comentas de que no es aconsejable hacer un ORDER BY y es mejor un SORT de la tabla interna... creo que es aun mejor que la tabla interna sea SORTED, te ahorras el ordenarla y al hacer la consulta se ordena automáticamente.
                  Esta claro, una tabla sorted es mas eficiente a la hora de hacer busquedas.

                  Comentario

                  Trabajando...