检查簇中是否存在结构中的记录 table
Checking whether a record from a structure exist in a cluster table
我正在尝试验证结构中的记录是否在簇中 table。我想到使用的代码如下:
REPORT zzz.
DATA: BEGIN OF gs_zfi,
number TYPE bseg-belnr,
END OF gs_zfi.
START-OF-SELECTION.
SELECT SINGLE @abap_true
FROM bseg
INTO @DATA(lv_belnr_exists)
WHERE belnr = @gs_zfi-number. "number field has the same data element as the belnr(belnr_d)
IF lv_belnr_exists IS INITIAL.
MESSAGE a011(zfivald).
ENDIF.
但是,我不允许在集群 table 中使用 abap_true。 table bseg?
的belnr字段是否有类似的方法检查结构中的记录,即字段编号
如评论中所述,SAP HANA 系统上没有语法错误。你能做的就是关注
REPORT zzz.
DATA: BEGIN OF gs_zfi,
number TYPE bseg-belnr,
END OF gs_zfi.
START-OF-SELECTION.
SELECT SINGLE belnr
FROM bseg
INTO @DATA(lv_belnr)
WHERE belnr = @gs_zfi-number.
DATA(lv_belnr_exists) = xsdbool( sy-subrc = 0 ).
IF lv_belnr_exists IS INITIAL.
MESSAGE a011(zfivald).
ENDIF.
或者
REPORT zzz.
DATA: BEGIN OF gs_zfi,
number TYPE bseg-belnr,
END OF gs_zfi.
START-OF-SELECTION.
SELECT belnr FROM bseg
INTO @DATA(lv_belnr)
WHERE belnr = @gs_zfi-number.
DATA(lv_belnr_exists) = abap_true.
EXIT.
ENDSELECT.
IF lv_belnr_exists IS INITIAL.
MESSAGE a011(zfivald).
ENDIF.
据我所知,检查数据库 table 中是否存在特定行的最有效和简洁的方法是 SELECT SINGLE COUNT( * )
。您甚至不需要临时变量,因为您只需检查 sy-subrc
或 sy-dbcnt
:
SELECT SINGLE COUNT( * )
FROM bseg
WHERE belnr = @gs_zfi-number.
IF sy-subrc = 0.
" Record exists
ELSE.
" Record does not exist
ENDIF.
您可以将字段 BUKRS(公司代码)添加到 where 子句中,使您的选择运行更快
我正在尝试验证结构中的记录是否在簇中 table。我想到使用的代码如下:
REPORT zzz.
DATA: BEGIN OF gs_zfi,
number TYPE bseg-belnr,
END OF gs_zfi.
START-OF-SELECTION.
SELECT SINGLE @abap_true
FROM bseg
INTO @DATA(lv_belnr_exists)
WHERE belnr = @gs_zfi-number. "number field has the same data element as the belnr(belnr_d)
IF lv_belnr_exists IS INITIAL.
MESSAGE a011(zfivald).
ENDIF.
但是,我不允许在集群 table 中使用 abap_true。 table bseg?
的belnr字段是否有类似的方法检查结构中的记录,即字段编号如评论中所述,SAP HANA 系统上没有语法错误。你能做的就是关注
REPORT zzz.
DATA: BEGIN OF gs_zfi,
number TYPE bseg-belnr,
END OF gs_zfi.
START-OF-SELECTION.
SELECT SINGLE belnr
FROM bseg
INTO @DATA(lv_belnr)
WHERE belnr = @gs_zfi-number.
DATA(lv_belnr_exists) = xsdbool( sy-subrc = 0 ).
IF lv_belnr_exists IS INITIAL.
MESSAGE a011(zfivald).
ENDIF.
或者
REPORT zzz.
DATA: BEGIN OF gs_zfi,
number TYPE bseg-belnr,
END OF gs_zfi.
START-OF-SELECTION.
SELECT belnr FROM bseg
INTO @DATA(lv_belnr)
WHERE belnr = @gs_zfi-number.
DATA(lv_belnr_exists) = abap_true.
EXIT.
ENDSELECT.
IF lv_belnr_exists IS INITIAL.
MESSAGE a011(zfivald).
ENDIF.
据我所知,检查数据库 table 中是否存在特定行的最有效和简洁的方法是 SELECT SINGLE COUNT( * )
。您甚至不需要临时变量,因为您只需检查 sy-subrc
或 sy-dbcnt
:
SELECT SINGLE COUNT( * )
FROM bseg
WHERE belnr = @gs_zfi-number.
IF sy-subrc = 0.
" Record exists
ELSE.
" Record does not exist
ENDIF.
您可以将字段 BUKRS(公司代码)添加到 where 子句中,使您的选择运行更快