检查表是否存在

时间:2014-03-11 08:39:24

标签: sap abap

我在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词典中定义为表格

5 个答案:

答案 0 :(得分: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.

答案 1 :(得分:1)

你写了

吗?
  EXPORTING
     name     = 'mytable'

  EXPORTING
     name     = 'MYTABLE'

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

答案 2 :(得分: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.

答案 3 :(得分:0)

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

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

此致 特朗德

答案 4 :(得分:0)

如果你想要它通过传递错误,你可以将表的名称分配给字段符号。

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

如果它仍然出现错误,Occam knive会告诉我们检查该表是否确实存在于ABAP字典中(se11)