Dhi*_*vya 3 abap where-clause opensql sap-selection-screens
我正在使用 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 .
Run Code Online (Sandbox Code Playgroud)
首先,我尝试使用选择查询从MARA表中获取数据。为了检索特定记录,我必须使用WHERE条件。但我对条件部分感到困惑。我们可以使用INITIAL条件检查哪个参数具有值。
但是 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.
Run Code Online (Sandbox Code Playgroud)
当您这样做时,您的选择屏幕将允许数据的多个值和范围。
如果您需要像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.
Run Code Online (Sandbox Code Playgroud)
评论:
MARA必须定义为 aTABLE如果您使用SELECT-OPTIONSMATCHCODE OBJECT吗?通常使用FOR已经定义了正确的匹配码对象(通过数据元素/域)。免责声明:
| 归档时间: |
|
| 查看次数: |
16716 次 |
| 最近记录: |