我需要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)