检查表是否存在



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

我正在用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字典中没有定义为表

有一种纯ABAP方法可以在运行时检查表是否存在,而无需使用函数模块。SELECT语句允许将表名作为类变量或字符串字面值放在括号中传递。在这种情况下,表名将在运行时检查,而不是在编译时检查。当它不存在时,抛出类型为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.

你写了吗

  EXPORTING
     name     = 'mytable'

  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开发人员来说是非常明显的。不需要功能模块

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

问候,Trond

如果你想绕过这个错误,你可以把表的名字赋给一个字段符号。

但是如果你想知道你为什么会得到这个错误,这是因为你的硬编码定义中的小写字母。

如果它仍然得到这个错误,Occam刀告诉我们检查表是否真的存在于ABAP字典(se11)

相关内容

  • 没有找到相关文章

最新更新