PDA

Ver la Versión Completa : Error DBIF_RSQL_INVALID_RSQL.


DCErick
02/05/07, 23:06:15
Hola..

estoy tratando de ejecutar la siguiente linea de codigo y no me anda...



SELECT c~matnr c~werks t~maktx a~prdha
FROM marc AS c INNER JOIN makt AS t
ON t~matnr = c~matnr
AND t~spras = sy-langu
INNER JOIN mara AS a
ON a~matnr = c~matnr
INTO CORRESPONDING FIELDS OF TABLE gt_repop
WHERE c~werks IN r_werks
AND c~matnr IN s_matnr.



Me marca el siguiente error :

Err.tmpo.ejec. DBIF_RSQL_INVALID_RSQL
Excep. CX_SY_OPEN_SQL_DB
Fecha y hora 02.05.2007 16:47:47



Txt.brv.
Error in RSQL module of database interface.

Anál.errores :

An exception occurred. This exception is dealt with in more detail below. The exception, which is assigned to the class 'CX_SY_OPEN_SQL_DB', was neither caught nor passed along using a RAISING clause, in the procedure "GET_DATOS" "(FORM)".


The reason for the exception is:
The SQL statement generated from the SAP Open SQL Statement violates a restriction imposed by the database system used in R/3.

Possible errors:
o The maximum size of an SQL statement has been exceeded.
o The statement contains too many input variables.
o The space needed for the input data exceeds the available memory.
o ...

En el parametro s_matnr que es un rango estoy metiendo 4,372 materiales los cuales quiero consultar.

Estos los meto mediante la opcion de Seleccion Multiple y subiendo un archivo TXT con las entradas...

A lo que veo es por algo de memoria de SAP permitada en las consultas SQL, pero no estoy muy seguro...

Que opinan?....

tracer
03/05/07, 09:16:20
Hola DCErick,

Efectivamente, ya te has contestado tu a la pregunta :D , la sentencia SQL esta consumiendo demasiada memoria por la gran cantidad de datos que tiene que procesar, prueba a partir el select en varias consultas, una para cada tabla guardando el resultado en tablas internas en lugar de hacer un inner join.

Un saludo, ya nos contaras que tal te fué ;) .

ballan
03/05/07, 09:59:25
Has pensado en quitar la linea AND t~spras = sy-langu en la clausula ON del INNER JOIN y ponerla en la clausula WHERE?

gabideas
06/08/10, 00:47:00
Tengo este codigo y en tiempo de ejecucion me tira error de rsql Nro 23 y que no puede acceder a la sflight;
ahi va el codigo:
TYPES: BEGIN OF gs_vuelos,
carrid TYPE sflight-carrid,
fldate TYPE sflight-fldate,
price TYPE sflight-price,
money TYPE sflight-currency,
planetype TYPE sflight-planetype,
cityfrom TYPE spfli-cityfrom,
cityto TYPE spfli-cityto,

END OF gs_vuelos.

TYPES: BEGIN OF gs_vuelos1,
cityfrom TYPE spfli-cityfrom,
cityto TYPE spfli-cityto,
END OF gs_vuelos1.


TYPES: gt_tvuelos TYPE STANDARD TABLE OF gs_vuelos,
gt_vuelos1 TYPE STANDARD TABLE OF gs_vuelos1.

DATA: gt_vuelos TYPE gt_tvuelos,
gw_vuelos TYPE gs_vuelos,
gt_vuelos1 TYPE gt_vuelos1,
gw_vuelos1 TYPE gs_vuelos1,
l_total TYPE sflight-price.

SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME.
PARAMETERS: p_carrid TYPE sflight-carrid.
SELECT-OPTIONS: s_date FOR sflight-fldate,
s_price FOR sflight-price.
SELECTION-SCREEN END OF BLOCK blk1.

SELECTION-SCREEN BEGIN OF BLOCK blk2 WITH FRAME.
PARAMETERS: p_write RADIOBUTTON GROUP a,
p_alv RADIOBUTTON GROUP a.
SELECTION-SCREEN END OF BLOCK blk2.


START-OF-SELECTION.

SELECT sflight~fldate sflight~price sflight~currency
sflight~planetype spfli~cityfrom spfli~cityto
FROM sflight INNER JOIN spfli ON sflight~carrid = spfli~carrid
AND sflight~connid = spfli~connid
INTO TABLE gt_vuelos
WHERE fldate IN s_date AND price IN s_price.

Bueno esto es parte del programa en lo referente al select ¿QUE ESTÁ MALLL?? POR FAVOR NECESITO RESPUESTAS! gRACIAAASSS....!

calanis
06/08/10, 05:05:09
Hola

DCErick, si efectivamente el problema radica en el Select Option de material(s_matnr), ya que SAP al traducir la sentecia SQL empieza a desglosarlo como una concatenación de OR's.

Podes restringirlo por un tamaño aceptado (chunks) de información.

*Por Ejemplo el máximo es de 1000.
DATA:
*ls_matnr-->Línea de S_MATNR
*r_matnr1-->Rango gemelo de s_matnr definido como global
lv_tot type i,"Total de Lineas
lv_max type i value 1000."Valor de tope del Rango S_MATNR

SORT S_MATNR BY LOW.

DELETE ADJACENT DUPLICATES FROM s_matnr COMPARING LOW.

DESCRIBE TABLE s_matnr LINES lv_tot.

*Aplica la lógica necesaria para que solo te vaya quedando de a 1000
IF lv_tot > lv_max.
LOOP AT s_matnr INTO ls_matnr.
APPEND ls_matnr to r_matnr.
IF sy-tabix = lv_max.
PERFORM Z_GET_DATA.
REFRESH r_matnr.
ENDIF.
AT LAST.
IF r_matnr[] IS NOT INITIAL.
PERFORM Z_GET_DATA.
ENDIF.
ENDAT.
ENDDO.
ELSE.
r_matnr[] = s_matnr[].
PERFORM Z_GET_DATA.
endif.

FORM Z_GET_DATA.
SELECT c~matnr c~werks t~maktx a~prdha
FROM marc AS c INNER JOIN makt AS t
ON t~matnr = c~matnr
AND t~spras = sy-langu
INNER JOIN mara AS a
ON a~matnr = c~matnr
APPENDING CORRESPONDING FIELDS OF TABLE gt_repop
WHERE c~werks IN r_werks
AND c~matnr IN r_matnr.
ENDFORM.


Gaideas, fijate si esto te anda no tengo acceso a SAP como para probarlo ;).


SELECT A~fldate A~price A~currency as money
A~planetype B~cityfrom B~cityto
FROM sflight as A INNER JOIN spfli as B
ON A~carrid = B~carrid
AND A~connid = B~connid
INTO CORRESPONDIG FIELDS OF TABLE gt_vuelos
WHERE A~fldate IN s_date
AND A~price IN s_price.