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