Select 动态指定数据库表?可能吗?

Select 动态指定数据库表?可能吗?,select,dynamic,abap,opensql,Select,Dynamic,Abap,Opensql,我正在编写一个BSP,根据用户输入,我需要从不同的DB表中选择数据。这些表格有不同的包装。是否可以根据路径指定要使用的表,如下所示: data: path1 type string value 'package1/DbTableName', path2 type string value 'package2/OtherDbTableName', table_to_use type string. if some condition table_to_use = path

我正在编写一个BSP,根据用户输入,我需要从不同的DB表中选择数据。这些表格有不同的包装。是否可以根据路径指定要使用的表,如下所示:

data: path1 type string value 'package1/DbTableName',
      path2 type string value 'package2/OtherDbTableName',
      table_to_use type string.

if some condition
table_to_use = path1.    
elseif some condition
table_to_use = path2.    
endif.

select *
from table_to_use

     ...

endselect

我是ABAP&Open SQL的新手,我知道这可能是一个简单/愚蠢的问题:)任何帮助都将不胜感激

您可以定义要在变量中使用的表的名称,然后在请求的FROM close中使用该变量:

data tableName type tabname.  
if <some condition>.   
   tableName='PA0001'.   
else.   
   tableName='PA0002'.   
endif.   
select * from (tableName) where ...
数据表名类型tabname。
如果。
tableName='PA0001'。
其他的
tableName='PA0002'。
恩迪夫。
从(表名)中选择*,其中。。。
此方法有一些限制,因为稳定值不能包含RAWSTRING、STRING或SSTRING类型的字段

至于桌子在不同的包装中,我认为这无关紧要


关于,

您可以定义要在变量中使用的表的名称,然后在请求的FROM close中使用该变量:

data tableName type tabname.  
if <some condition>.   
   tableName='PA0001'.   
else.   
   tableName='PA0002'.   
endif.   
select * from (tableName) where ...
数据表名类型tabname。
如果。
tableName='PA0001'。
其他的
tableName='PA0002'。
恩迪夫。
从(表名)中选择*,其中。。。
此方法有一些限制,因为稳定值不能包含RAWSTRING、STRING或SSTRING类型的字段

至于桌子在不同的包装中,我认为这无关紧要


关于,

是的,包分配通常没有什么区别。如果在系统中打开了包检查(通常不打开)-这可能很重要,这取决于包的设置方式以及包提供的对象。@Esti:谢谢提供有关包检查的信息。我从未见过它被使用,甚至不知道它的存在。是的,包分配通常没有什么区别。如果在系统中打开了包检查(通常不打开)-这可能很重要,这取决于包的设置方式以及包提供的对象。@Esti:谢谢提供有关包检查的信息。我从未见过它被使用过,甚至不知道它的存在。