0

我需要SELECT在 ABAP 中声明,但问题是该系统上不存在该表。

我正在使用 FM 检查表是否存在:

CALL FUNCTION 'DDIF_TABL_GET'
  EXPORTING
     name     = 'mytable'
  IMPORTING
     gotstate = l_got_state
  EXCEPTIONS
     OTHERS   = 1.

IF sy-subrc = 0.
  SELECT SINGLE * FROM mytable  INTO  mylocalstructure WHERE ...........  .
ENDIF.

但是还是有语法错误:

“mytable”未在 ABAP 字典中定义为表

4

5 回答 5

8

有一种纯 ABAP 方法可以在运行时检查表是否存在,而无需使用功能模块。该SELECT语句允许将表的名称作为 clike 变量或字符串文字传递,方法是将其放在括号中。在这种情况下,将在运行时检查表名,而不是在编译时检查。当它不存在时,CX_SY_DYNAMIC_OSQL_SEMANTICS会抛出一个类型的异常,您可以捕获它:

TRY.
    SELECT * FROM ('mytable') INTO mylocalstructure WHERE ........... 
  CATCH CX_SY_DYNAMIC_OSQL_SEMANTICS.
    MESSAGE 'Table does not exist' TYPE 'S' DISPLAY LIKE 'E'.
ENDTRY.
于 2014-03-11T09:19:39.403 回答
1

您也可以尝试从表 DD03L 中选择。

DATA lv_mytabname TYPE tablename.

lv_mytabname = 'ZTABLE'.

SELECT SINGLE FIELDNAME

FROM DD03L

INTO lv_mytabname

WHERE FIELDNAME EQ lv_mytabname.

IF sy-subrc EQ 0.

* TABLE EXISTS!

ENDIF.
于 2014-03-27T12:33:54.567 回答
1

你写了吗

  EXPORTING
     name     = 'mytable'

或者

  EXPORTING
     name     = 'MYTABLE'

在 ABAP 中,如果您使用 ' ',通常以大写字母书写很重要。

于 2014-03-11T09:57:30.440 回答
0

只需转到事务 SE11 并检查表是否存在。这对 ABAP 开发人员来说非常明显。无需功能模块。

如果系统上不存在该表,则无法从中进行选择。也很明显。有些表只存在于某些系统上;IE。大多数 ERP 表只存在于 ERP 盒子上(例如,你不会在 HR 盒子中找到 MARA)。

问候, 特隆德

于 2016-10-20T08:08:21.600 回答
0

如果您希望它绕过错误,您可以将表的名称分配给字段符号。

但是,如果您只想知道为什么会出现该错误,那是因为硬代码定义中的小写字母。

如果仍然出现该错误,奥卡姆刀会告诉我们检查该表是否真的存在于 ABAP 字典(se11)中

于 2016-12-15T20:15:08.477 回答