PDA

Ver la Versión Completa : Error DBIF_RSQL_INVALID_RSQL CX_SY_OPEN_SQL_DB in program


damlaplata
15/06/12, 13:06:01
Buen Dia Gente Sabia,
Les consulto a Uds por este error que me aparece.
Por la ST22 encontre que las causas podrian ser:
o The maximum size of an SQL statement was exceeded.
o The statement contains too many input variables.
o The input data requires more space than is available.
o ...

Y ademas me marca esta sentencia:
SELECT pep,acao,conta_debito,ccusto_debito,conta_credito,ccusto_cretito

FROM zistps_mtcd_acao

INTO TABLE tl_mtcd_acao

FOR ALL ENTRIES IN tl_perc_fae

WHERE pep IN rl_pep_ran

AND acao EQ tl_perc_fae-acao.

Yo pienso que podria ser la primera causa, ademas me fije los datos y tengo:

-La tabla Z 'zistps_mtcd_acao' tiene 258 records

-La tabla interna 'tl_perc_fae' tiene 57.

-Pero, el 'Range' rl_pep_ran' tiene 5747 records. Con lo cual la comparacion con este se hace tremenda.
Mi primera forma de encararlo es separar la sentencia where. Primero tomo por rl_pep_ran y luego filtro la tabla resultado 'tl_mtcd_acao' por tl_perc_fae-acao.

Que les parece? no se si funcionaria....eso lo mas choto porque no tengo caso con las misma cantidad de datos.
A alguien le paso esto? como lo soluciono?

Desde antemano muchas gracias por la ayuda.

Un saludo Genial.:D

calin
15/06/12, 15:18:52
Hola damlaplata,

Revisa que el rango rl_pep_ran no tenga registros repetidos y la tabla interna tl_perc_fae no tenga registros con el mismo valor en el campo acao.

Saludos.

damlaplata
15/06/12, 20:15:41
Hola damlaplata,

Revisa que el rango rl_pep_ran no tenga registros repetidos y la tabla interna tl_perc_fae no tenga registros con el mismo valor en el campo acao.

Saludos.

eso lo hago. Igual me queda con una gran cantidad rl_pep_ran. Gracias por responder.

Ahora estoy viendo si funciona la idea que propuse..

calin
16/06/12, 04:08:35
Podrias probar la siguientes opciones:

1) Construir el rango r_acao para el campo acao.

SELECT pep,acao,conta_debito,ccusto_debito,conta_credito, ccusto_cretito

FROM zistps_mtcd_acao

INTO TABLE tl_mtcd_acao.

SORT tl_mtcd_acao BY pep acao.

DELETE tl_mtcd_acao
where NOT pep IN rl_pep_ran or NOT acao IN r_acao.

2) Construir el rango r_acao para el campo acao.

Construir la tabla interna t_pep sólo con los valores de pep.

SELECT pep,acao,conta_debito,ccusto_debito,conta_credito, ccusto_cretito

FROM zistps_mtcd_acao

INTO TABLE tl_mtcd_acao.

SORT tl_mtcd_acao by acao

DELETE tl_mtcd_acao
NOT acao IN r_acao.

SORT t_pep by pep.

SORT tl_mtcd_acao BY pep.

LOOP at tl_mtcd_acao.

READ TABLE t_pep
WITH KEY pep = tl_mtcd_acao-pep
BINARY SEARCH
TRANSPORTING NO FIELDS.

IF sy-sybrc NE 0.
DELETE tl_mtcd_acao
WHERE pep EQ tl_mtcd_acao-pep.
CONTINUE.
ENDIF.

ENDLOOP.

Nota: El uso de SELECT sin clausula WHERE no es recomendable si aumenta significativamente el número de registros de la tabla zistps_mtcd_acao.

Saludos.

DCErick
19/06/12, 13:24:27
Verifica que la tabla interna tl_mtcd_acao tenga los campos
pep,acao,conta_debito,ccusto_debito,conta_credito, ccusto_cretito en ese mismo orden, que no le falte ninguno. Si le sobran no hay problema siempre y cuando estén al final.