3

我正在使用 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 参数有可能具有值。对于每种情况,我们都必须编写选择查询(如果这样会导致性能问题),或者有什么方法可以在选择查询中使用动态条件部分?

4

2 回答 2

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-command 这样的单个值,则必须为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.

评论:

  • MARATABLE如果您使用,则必须定义为SELECT-OPTIONS
  • 你真的需要MATCHCODE OBJECT吗?通常使用FOR已经定义了正确的匹配码对象(通过数据元素/域)。

免责声明:

  • 我还没有可用的 SAP 系统,所以代码可能包含语法错误。- 我明天会检查它。
于 2012-05-15T17:50:12.293 回答
4

我认为最简单的方法是使用select-options。然后,您可以将 select-option 值与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-extensionno intervals表现得像一个参数(或多或少)。

于 2012-05-15T17:51:08.593 回答