错误信息如下:
Runtime Errors DBIF_RSQL_INVALID_RSQL
Except. CX_SY_OPEN_SQL_DB
Date and Time 2013.06.25 23:36:07
Short text
Error in module RSQL of the database interface.
What happened?
Error in the ABAP Application Program
The current ABAP program "ZSYJ0622TEST" had to be terminated because it has
come across a statement that unfortunately cannot be executed.
Error analysis
An exception occurred that is explained in detail below.
The exception, which is assigned to class 'CX_SY_OPEN_SQL_DB', was not caught
and
therefore caused a runtime error.
The reason for the exception is:
In a SELECT access, the read file could not be placed in the target
field provided.
Either the conversion is not supported for the type of the target field,
the target field is too small to include the value, or the data does not
have the format required for the target field. 代码如下:
TABLES: BSEG,BSID,BSAD .
TYPES: BEGIN OF TY_TAB_KEY,
BUKRS TYPE BSEG-BUKRS,
BELNR TYPE BSEG-BELNR,
GJAHR TYPE BSEG-GJAHR,
BUZEI TYPE BSEG-BUZEI,
END OF TY_TAB_KEY.
DATA TAB_KEY TYPE STANDARD TABLE OF TY_TAB_KEY.
DATA GS_KEY TYPE TY_TAB_KEY.
TYPES: BEGIN OF TY_TAB_BSEG,
UMSKZ TYPE BSEG ,
ZLSPR TYPE BSEG,
GSBER TYPE BSEG,
HKONT TYPE BSEG,
END OF TY_TAB_BSEG.
DATA TAB_BSEG TYPE STANDARD TABLE OF TY_TAB_BSEG.
DATA GS_TAB_BSEG TYPE TY_TAB_BSEG.
SELECT
BUKRS "公司代码
BELNR "财务凭证编号
GJAHR "会计年度
BUZEI "会计凭证中的行项目
FROM BSID
INTO TABLE TAB_KEY UP TO 10 ROWS "存放主键项目的内部表
WHERE VBEL2 = ''"销售凭证编号
AND POSN2 = ''. " 销售凭证明细编号
*2)再根据销售凭证编号和明细编号,从BSAD中检索出已清帐明细行项目。
SELECT
BUKRS "公司代码
BELNR "财务凭证编号
GJAHR "会计年度
BUZEI " 会计凭证中的行项目
FROM BSAD
APPENDING TABLE TAB_KEY UP TO 10 ROWS"存放主键项目的内部表
WHERE VBEL2 = '' " 销售凭证编号
AND POSN2 = ''. "销售凭证明细编号
*3)然后再根据上面检索出的主键列表,从BSEG中检索出相应的明细行项目。
SELECT
UMSKZ
ZLSPR
GSBER
HKONT
FROM BSEG
INTO TABLE TAB_BSEG"存放检索结果的内部表
FOR ALL ENTRIES IN TAB_KEY " 存放主键项目的内部表
WHERE BSEG~BUKRS = TAB_KEY-BUKRS " 公司代码
AND BSEG~GJAHR = TAB_KEY-GJAHR " 财务凭证编号
AND BSEG~BELNR = TAB_KEY-BELNR " 会计年度
AND BSEG~BUZEI = TAB_KEY-BUZEI. " 会计凭证中的行项目
程序中,类型TY_TAB_BSEG没有定义好。
改成下面这段定义代码就ok。
TYPES: BEGIN OF TY_TAB_BSEG,
UMSKZ TYPE BSEG-UMSKZ ,
ZLSPR TYPE BSEG-ZLSPR,
GSBER TYPE BSEG-GSBER,
HKONT TYPE BSEG-HKONT,
END OF TY_TAB_BSEG.
另,在使用FOR ALL ENTRIES IN的时候,应该首先判断关联表是否为空,然后排序。
程序中,类型TY_TAB_BSEG没有定义好。
改成下面这段定义代码就ok。
TYPES: BEGIN OF TY_TAB_BSEG,
UMSKZ TYPE BSEG-UMSKZ ,
ZLSPR TYPE BSEG-ZLSPR,
GSBER TYPE BSEG-GSBER,
HKONT TYPE BSEG-HKONT,
END OF TY_TAB_BSEG.