MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Viejo 10/04/08, 15:08:13
mystic_soul mystic_soul is offline
Member
 
Fecha de Ingreso: sep 2007
Mensajes: 76
Duda con select

Hola gente! tengo una duda existencial.. puede ir dentro de un select un inner join y un for all entries como el siguiente?

SELECT a~vbeln a~fkart a~waerk a~vkorg a~vtweg
b~posnr b~pstyv b~werks b~wavwr b~kzwi1 b~kzwi3
INTO TABLE it_vbrk
FROM vbrk AS a
INNER JOIN vbrp AS b
ON a~vbeln = b~vbeln
FOR ALL ENTRIES IN it_s900
WHERE a~vbeln EQ it_s900-vbeln
AND a~vkorg IN s_vkorg
AND a~vtweg IN s_vtweg
AND a~bukrs EQ p_bukrs
AND b~pstyv IN s_pstyv.

es performante esto? Desde ya se los agradezco!!
Responder Con Cita
  #2  
Viejo 10/04/08, 15:29:07
Avatar de DavidXD_XD
DavidXD_XD DavidXD_XD is offline
Moderator
 
Fecha de Ingreso: ago 2006
Localización: Lima - Perú
Mensajes: 1,251
Yo pienso que si, en ese caso estas consultando con cabecera y detalle (VBRK y VBRP), y con respecto al FOR ALL ENTRIES creo q otra opcion en vez de la sentencia es realizar un LOOP y barrer con cada registro ... entre esos 2 mas performance es el FOR ALL ENTRIES
__________________
David Carballido Córdova
Responder Con Cita
  #3  
Viejo 10/04/08, 22:07:09
Avatar de Rodolfo Montiel Rivera
Rodolfo Montiel Rivera Rodolfo Montiel Rivera is offline
Member
 
Fecha de Ingreso: oct 2007
Mensajes: 92
Es correcto lo mejor opcion lo que tratas de hacer ya que estas ahorrandote el barrido de la tabla interna.
__________________
01010000
01001010
10011000
10100001

De Byte a Beat.
Responder Con Cita
  #4  
Viejo 11/04/08, 18:15:36
mystic_soul mystic_soul is offline
Member
 
Fecha de Ingreso: sep 2007
Mensajes: 76
joya! voy en buen camino entonces!!

Ahora si pongo esto..

SELECT spmon sptag vbeln pkunag pkunre matnr fkimg
INTO TABLE it_s900
FROM s900
FOR ALL ENTRIES IN it_ausp
WHERE matnr EQ it_ausp-matnr
AND sptag IN s_sptag
AND fkart IN s_fkart
AND pkunag IN s_pkunag
AND pkunre IN s_pkunre
AND waerk EQ p_waers.

IF sy-subrc EQ 0.
sort it_s900 by vbeln.
SELECT a~vbeln a~fkart a~waerk a~vkorg a~vtweg
b~posnr b~pstyv b~werks b~wavwr b~kzwi1 b~kzwi3
INTO TABLE it_vbrk
FROM ( vbrk AS a
INNER JOIN vbrp AS b
ON a~vbeln = b~vbeln )
FOR ALL ENTRIES IN it_s900
WHERE a~vbeln EQ it_s900-vbeln
AND a~vkorg IN s_vkorg
AND a~vtweg IN s_vtweg
AND a~bukrs EQ p_bukrs
AND b~pstyv IN s_pstyv.

sique siendo performante??

Úlima edición por mystic_soul fecha: 11/04/08 a las 18:17:45.
Responder Con Cita
  #5  
Viejo 02/05/08, 13:05:51
mystic_soul mystic_soul is offline
Member
 
Fecha de Ingreso: sep 2007
Mensajes: 76
Hola gente! todavia sigo sin poder sacarme la duda de este select...

SELECT spmon sptag vbeln pkunag pkunre matnr fkimg
INTO TABLE it_s900
FROM s900
FOR ALL ENTRIES IN it_ausp
WHERE matnr EQ it_ausp-matnr
AND sptag IN s_sptag
AND fkart IN s_fkart
AND pkunag IN s_pkunag
AND pkunre IN s_pkunre
AND waerk EQ p_waers.

IF sy-subrc EQ 0.
sort it_s900 by vbeln.
SELECT a~vbeln a~fkart a~waerk a~vkorg a~vtweg
b~posnr b~pstyv b~werks b~wavwr b~kzwi1 b~kzwi3
INTO TABLE it_vbrk
FROM ( vbrk AS a
INNER JOIN vbrp AS b
ON a~vbeln = b~vbeln )
FOR ALL ENTRIES IN it_s900
WHERE a~vbeln EQ it_s900-vbeln
AND a~vkorg IN s_vkorg
AND a~vtweg IN s_vtweg
AND a~bukrs EQ p_bukrs
AND b~pstyv IN s_pstyv.


no se si es performante.. o esto es mas performante?? :S

SELECT b~werks c~vkorg c~vtweg a~pkunag a~pkunre a~spmon a~matnr
c~fkart b~pstyv a~fkimg b~wavwr c~waerk b~kzwi3 b~kzwi1
a~sptag b~vbeln b~posnr
INTO TABLE it_s900
FROM s900 AS a
INNER JOIN vbrp AS b
ON a~vbeln = b~vbeln
AND a~posnr = b~posnr
INNER JOIN vbrk AS c
ON b~vbeln = c~vbeln
FOR ALL ENTRIES IN it_ausp
WHERE a~matnr EQ it_ausp-matnr
AND a~pkunag IN s_pkunag
AND a~pkunre IN s_pkunre
AND a~fkart IN s_fkart
AND a~waerk EQ p_waers
AND a~sptag IN s_sptag
AND b~pstyv IN s_pstyv
AND c~vkorg IN s_vkorg
AND c~vtweg IN s_vtweg
AND c~bukrs EQ p_bukrs.

IF sy-subrc EQ 0.
SORT it_s900 BY werks vkorg vtweg pkunag pkunre
spmon matnr fkart pstyv.
ENDIF.

desde ya se los agradezco!!!

Saludos!

Úlima edición por mystic_soul fecha: 02/05/08 a las 13:10:55.
Responder Con Cita
  #6  
Viejo 05/05/08, 10:23:56
ballan ballan is offline
Senior Member
 
Fecha de Ingreso: oct 2006
Mensajes: 671
Desde la transaccion SE30 puedes hacer mediciones para ver que codigo es mas optimo
Responder Con Cita
  #7  
Viejo 09/05/08, 19:53:35
mystic_soul mystic_soul is offline
Member
 
Fecha de Ingreso: sep 2007
Mensajes: 76
si, eso es verdad, de la se30 puedo ver los resultados de que si uno es mas performante que otro, pero me pasa algo raro con esa transaccion.. cuando lo ejecuto la primera vez, por ejemplo, me dice que consume 65% base de datos; lo ejecuto por 2da vez, me dice 90%, por 3ra, 99%, por 4ta vez, 50%.. me vuelvo loco! me varia los porcentajes de forma brusca y sin modificar el programa! (los porcentajes tiro como ejemplo) y no se bien porque es y como solucionarlo!

saludos!
Responder Con Cita
  #8  
Viejo 09/05/08, 20:58:43
larmadovr larmadovr is offline
Member
 
Fecha de Ingreso: ene 2008
Localización: Monterrey N.L. México
Mensajes: 77
Thumbs up Que tal:

La variación que tienes en cuanto a tiempo en la transacción SE30 es por que también depende de los recursos del sistema, es decir, si alguien esta corriendo procesos en el mismo momento que tú, se va tardar más tu programa. por tal motivo no es una buena medición para un query, a menos que lo ejecutes en una hora en la que tu sabes que está libre el sistema, para que puedas tener un buen parámetro al determinar cuál de tus dos opciones usar.

En mi experiencia con los querys al hacer inner join es más rápido que cargar en varias tablas. He realizado muchas cargas batch de millones de registros o procesado información utilizando los inner y son realmente rápidos.

Solo ten cuidado en hacer bien las relaciones, por que si no ligas bien las tablas, se te van a multiplicar los registros o incluso salir menos, esto debido a que al hacer los inner le indicas que todas las tablas están relacionadas y que no deseas información donde a una tabla le falte algún registro para hacer match con las otras.

En su defecto si requieres toda la información de una tabla independiente de otra, puedes usar el left ó right join.

Saludos, espero que sirva de algo estos comentarios.
__________________
I.S.C.T. Luis Armando Valdez Rodríguez
Consultor ABAP
correo:
cel: (045) 5537406023

"La vida premia la acción"
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 15:47:12.


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