Foro de programación ABAP
SAP / ABAP => Programación ABAP => Mensaje iniciado por: molaci en 24 de Febrero de 2010, 12:20:17 pm
-
Hola, me ocurre lo siguiente.
Estoy accediendo a una tabla de la base de datos con mas de 12.000 materiales a la vez y me pega un DUMP por exceso de entradas.
DBIF_RSQL_INVALID_RSQL
CX_SY_OPEN_SQL_DB
Que puedo hacer?
El código que tengo es el siguiente... donde r_matnr es el rango con lo mas de 12.000 materiales.
SELECT * FROM cdhdr WHERE objectclas EQ 'MATERIAL'
AND objectid IN r_matnr.
CHECK cdhdr-change_ind = 'U'.
CHECK cdhdr-udate IN s_laeda.
MOVE-CORRESPONDING cdhdr TO i_cdhdr.
APPEND i_cdhdr.
ENDSELECT.
Gracias por vuestra ayuda.
-
Hola.
Yo lo primero que haría sería intentar quitar ese SELECT... ENDSELECT. Y cambiarlo por un LOOP a una tabla interna, mas viendo la cantidad de registros a los que accede.
Pero... sin modificar mucho tu código de pongo un ejemplo de lo que puedes hacer.
Simplemente sería hacer paquetes de 5.000 registros, como por ejemplo...
RANGES r_matnr_tmp FOR r_matnr.
DATA: lf_lines TYPE i.
DATA: lf_desde TYPE i,
lf_hasta TYPE i.
DO.
CLEAR: r_matnr_tmp[], r_matnr_tmp.
lf_desde = lf_hasta + 1.
lf_hasta = 5000 + lf_hasta.
APPEND LINES OF r_matnr FROM lf_desde TO lf_hasta TO r_matnr_tmp.
DESCRIBE TABLE r_matnr_tmp LINES lf_lines.
IF lf_lines = 0.
EXIT.
ENDIF.
SELECT * FROM cdhdr WHERE objectclas EQ 'MATERIAL'
AND objectid IN r_matnr_tmp.
CHECK cdhdr-change_ind = 'U'.
CHECK cdhdr-udate IN s_laeda.
MOVE-CORRESPONDING cdhdr TO i_cdhdr.
APPEND i_cdhdr.
ENDSELECT.
ENDDO.
-
Me ha pasado lo mismo. No hay nada mas gratificante que buscar un poco y encontrarlo.
;D Muchas gracias dluis.
-
tengo el mismo problema, alguien me puede ayudar con esto!!!
SELECT c~werks c~matnr c~bwscl m~matkl m~meins m~mtart m~bstme e~lifnr e~relif
e~lifbi e~infnr e~ltsnr t~zone1 t~name1
INTO CORRESPONDING FIELDS OF TABLE t_output
FROM ( wlk1 AS w INNER JOIN marc AS c ON c~mandt = w~mandt
AND c~matnr = w~artnr
AND c~werks = p_werks
INNER JOIN mara AS m ON m~mandt = c~mandt
AND m~matnr = c~matnr
INNER JOIN eina AS e ON e~mandt = c~mandt
AND e~matnr = c~matnr
**** INNER JOIN mean AS n ON n~mandt = c~mandt
**** AND n~matnr = c~matnr
**** AND n~meinh = m~meins
INNER JOIN t001w AS t ON t~mandt = c~mandt
AND t~werks = p_werks
) CLIENT SPECIFIED
WHERE w~mandt = g_mandt
AND w~filia IN r_filia "EQ g_filia "p_werks
AND w~artnr IN s_matnr
AND w~datbi GE sy-datum
AND w~datab LE sy-datum
AND m~matkl IN r_matkl
and m~ersda in s_ersda
and m~mtart in s_mtart
AND c~bwscl IN s_bwscl
AND e~lifnr IN s_lifnr
AND e~relif IN r_relif
**** AND n~hpean = 'X'
**** AND ( ( e~lifbi GE sy-datum AND e~lifab LE sy-datum ) OR
**** ( e~lifbi = xfec ) )
AND c~mmsta IN r_mmsta
AND m~mstae IN r_mstae.
-
Hola Andrea,
¿Me puedes decir cual es tu variable que contiene tantos registros?
¿Si te pasa lo mismo porque no aplicas la solución que se ha mencionado?
Saludos