我使用5个参数从数据库表中获取详细信息( mara,makt,marc,mard )。
PARAMETERS :number TYPE matnr MATCHCODE OBJECT MAT1 ,
type TYPE MTART MATCHCODE OBJECT H_T134 ,
sector TYPE MBRSH MATCHCODE OBJECT H_T137 ,
group TYPE MATKL MATCHCODE OBJECT H_T023 ,
unit TYPE MEINS MATCHCODE OBJECT H_T006 .
首先,我尝试使用选择查询从 MARA 表中获取数据。为了检索特定记录,我必须使用 WHERE 条件。但我在条件部分感到困惑。我们可以使用 INITIAL 条件检查哪个参数有值。
但是有2/3/4/5参数有机会获得值。对于每种情况,我们必须编写选择查询(如果是这样会导致性能问题)或者是否有任何方法可以在select查询中使用动态条件部分?
答案 0 :(得分:4)
您可以使用SELECT-OPTIONS
:
TABLES MARA.
SELECT-OPTIONS:
s_matnr FOR mara-matnr MATCHCODE OBJECT MAT1 ,
s_mtart FOR mara-MTART MATCHCODE OBJECT H_T134 ,
s_mbrsh FOR mara-MBRSH MATCHCODE OBJECT H_T137 ,
s_matkl FOR mara-MATKL MATCHCODE OBJECT H_T023 ,
s_meins FOR mara-MEINS MATCHCODE OBJECT H_T006 .
* [...]
SELECT * FROM MARA where
matnr in s_matnr and
mtart in s_mtart and
mbrsh in s_mbrsh and
matkl in s_matkl and
meins in s_meins.
执行此操作时,选择屏幕将允许数据的多个值和范围。
如果您需要parameter
- 命令等单个值,则必须为SELECT-OPTION
设置附加选项:
NO INTERVALS
仅允许单个值NO-EXTENSION
只允许一个值。OBLIGATORY
如果不允许空值(据我所知,你的问题相反,你不需要它)。所以你的选择是:
SELECT-OPTIONS:
s_matnr FOR mara-matnr NO-EXTENSION NO INTERVALS,
s_mtart FOR mara-MTART NO-EXTENSION NO INTERVALS,
s_mbrsh FOR mara-MBRSH NO-EXTENSION NO INTERVALS,
s_matkl FOR mara-MATKL NO-EXTENSION NO INTERVALS,
s_meins FOR mara-MEINS NO-EXTENSION NO INTERVALS.
备注:
MARA
,则必须将TABLE
定义为SELECT-OPTIONS
MATCHCODE OBJECT
吗?通常,FOR
的使用已经定义了正确的匹配代码对象(通过数据元素/域)。声明:
答案 1 :(得分:4)
我认为最简单的方法是使用select-options
代替。然后,您可以在查询中使用带有in
表达式的select-option值
这样,当值为空时,它将自动被忽略(当您在查询中使用空参数时不会发生这种情况),因此您不必为每个可能的值创建单独的WHERE
表达式组合。一个例子:
tables: mara.
select-options number for mara-matnr matchcode object mat1 no-extension no intervals.
select-options type for mara-mtart matchcode object h_t134 no-extension no intervals.
select-options sector for mara-mbrsh matchcode object h_t137 no-extension no intervals.
select-options group for mara-matkl matchcode object h_t023 no-extension no intervals.
select-options unit for mara-meins matchcode object h_t006 no-extension no intervals.
select distinct mara~matnr makt~maktx marc~werks mard~lgort into table ta_materials
from mara
inner join makt on makt~matnr = mara~matnr
inner join marc on marc~matnr = mara~matnr
inner join mard on mard~matnr = mara~matnr
where makt~spras = sy-langu and
mara~matnr in number and
mara~mtart in type and
mara~mbrsh in sector and
mara~matkl in group and
mara~meins in unit
order by mara~matnr.
no-extension
和no intervals
选项会使select-option在屏幕上的行为类似于参数(或多或少)。