Abap 检查表是否存在

Abap 检查表是否存在,abap,sap-data-dictionary,Abap,Sap Data Dictionary,我需要ABAP中的SELECT语句,但问题是,该表在该系统上不存在 我正在用FM检查表是否存在: 调用函数“DDIF\u TABL\u GET” 出口 名称='mytable' 进口 gotstate=l_got_state 例外情况 其他=1。 如果sy subrc=0。 从mytable中选择SINGLE*进入mylocalstructure,其中。 恩迪夫。 但仍然存在一个语法错误: “mytable”在ABAP字典中未定义为表 有一种纯粹的ABAP方法可以在不使用函数模块的情况下检查表

我需要ABAP中的
SELECT
语句,但问题是,该表在该系统上不存在

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

调用函数“DDIF\u TABL\u GET”
出口
名称='mytable'
进口
gotstate=l_got_state
例外情况
其他=1。
如果sy subrc=0。
从mytable中选择SINGLE*进入mylocalstructure,其中。
恩迪夫。
但仍然存在一个语法错误:

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


有一种纯粹的ABAP方法可以在不使用函数模块的情况下检查表在运行时是否存在。
SELECT
语句允许通过将表名放在括号中,将表名作为clike变量或字符串文本传递。在这种情况下,表名将在运行时检查,而不是在编译时检查。当它不存在时,将抛出类型为
CX\u SY\u DYNAMIC\u OSQL\u 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.
你写信了吗

  EXPORTING
     name     = 'mytable'


在ABAP中,如果使用“”,则使用大写字母书写通常很重要

您也可以尝试从表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.

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

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

问候,,
Trond

如果希望它绕过错误,可以将表名指定给字段符号

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


如果仍然出现该错误,Occam knive会告诉我们检查ABAP字典(se11)中是否确实存在该表,这只会导致功能模块无法工作。激活程序时不会导致语法错误。您确定吗?因此我有一个语法错误。改成大写后,程序运行良好。嗨,菲利普,它运行良好。我没有用括号()实现它。非常感谢。祝你好运。
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.