MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   Select * From Up To 1 Rows (foro/showthread.php?t=62789)

budista1 23/05/12 07:25:27

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


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


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



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


Esta claro, una tabla sorted es mas eficiente a la hora de hacer busquedas. :)


Husos Horarios son GMT. La hora en este momento es 22:19:09.

www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web