检查簇中是否存在结构中的记录 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-subrcsy-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 子句中,使您的选择运行更快