PDA

Ver la Versión Completa : Select * From Up To 1 Rows


budista1
23/05/12, 07:25:27
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
23/05/12, 12:44:00
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

txuski84
29/05/12, 12:07:26
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. ;)

DCErick
29/05/12, 13:41:49
El SELECT SINGLE no se puede ordenar, el SELECT ENDSELECT si.

Siem
29/05/12, 20:11:54
El SELECT SINGLE no se puede ordenar, el SELECT ENDSELECT si.

Claro y contundente :) +1

txuski84
29/05/12, 20:20:38
Según el Best practice hay que evitar en la medida de lo posible utilizar el Select ... EndSelect, ya que es peor.

Siem
29/05/12, 22:35:45
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. :)

txuski84
30/05/12, 07:11:22
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.

Siem
30/05/12, 17:56:52
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. :)