我正在使用5个参数从DB表中获取详细信息(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 条件。但我在条件部分感到困惑。我们可以通过使用初始条件检查哪个参数具有值。
但是 2/3/4/5 参数有机会具有值。对于每种情况,我们都必须编写选择查询(如果是这样,则会导致性能问题),或者有没有办法在选择查询中使用动态条件部分?
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.
备注:
- 如果使用
SELECT-OPTIONS
,则必须将MARA
定义为TABLE
- 你真的需要
MATCHCODE OBJECT
吗?通常,FOR
的使用已经定义了正确的匹配代码对象(通过数据元素/域)。
免責聲明:
- 我还没有可用的SAP系统,因此代码可能包含语法错误。 - 我明天会检查它。
方法是改用select-options
。然后,可以在查询中将选择选项值与in
表达式一起使用。
这样,当值为空时,它将自动被忽略(在查询中使用空参数时不会发生这种情况),因此您不必为每个可能的组合创建单独的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
选项将使选择选项的行为类似于屏幕上的参数(或多或少)。