具有动态where条件的动态选择查询

2020-08-18 21:56发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我想在动态where条件下使用动态选择查询。 为此,我使用了下面的代码,但是在使用此代码时出现了转储。

如果还有其他方法可以满足此要求,请提出建议。

谢谢

Sanket Sethi

代码***************

参数:p_tabnam TYPE标签名,
             p_selfl1 TYPE edpline,
             p_value TYPE edpline,
             p_where1 TYPE edpline。

 数据:lt_where edpline TYPE TABLE,
       lt_sel_list edpline类型表,
       l_wa_name TYPE字符串,
       ls_where TYPE edpline,
       l_具有TYPE字符串,
       dref TYPE REF TO数据,
       itab_type类型参考cl_abap_tabledescr,
       struct_type类型参考cl_abap_structdescr,
       elem_type类型参考cl_abap_elemdescr,
       comp_tab TYPE cl_abap_structdescr => component_table,
       comp_fld TYPE cl_abap_structdescr =>组件。

 类型:f_count个类型i。

 FIELD-SYMBOLS: TYPE ANY TABLE,
 *  TYPE ANY,
                  TYPE ANY。

 struct_type?= cl_abap_typedescr => describe_by_name(p_tabnam)。
 elem_type?= cl_abap_elemdescr => describe_by_name('F_COUNT')。
 comp_tab = struct_type-> get_components()。


 comp_fld-name ='F_COUNT'。
 comp_fld-type = elem_type。
 APPEND comp_fld至comp_tab。

 struct_type = cl_abap_structdescr => create(comp_tab)。
 itab_type = cl_abap_tabledescr => create(struct_type)。

 l_wa_name ='l_WA'。
 创建数据dref TYPE HANDLE itab_type。
 ASSIGN dref-> *至。
 *创建数据dref TYPE HANDLE struct_type。
 * ASSIGN dref-> *至。

 *选择字段的创建
 将p_selfl1附加到lt_sel_list。
 将" COUNT(*)AS F_COUNT"附加到lt_sel_list。

 **创建" where"子句
 * CONCATENATE p_selfl1'=''p_value''。'
 * INTO ls_where
 *按空格分隔。
 * APPEND ls_where到lt_where。

 *创建" where"子句
 追加p_where1到lt_where。

 *创建"具有"子句
 l_having ='count(*)> = 1'。

 *动态选择
 选择(lt_sel_list)
        FROM(p_tabnam)
        表的对应字段。
 *在(lt_where)。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我想在动态where条件下使用动态选择查询。 为此,我使用了下面的代码,但是在使用此代码时出现了转储。

如果还有其他方法可以满足此要求,请提出建议。

谢谢

Sanket Sethi

代码***************

参数:p_tabnam TYPE标签名,
             p_selfl1 TYPE edpline,
             p_value TYPE edpline,
             p_where1 TYPE edpline。

 数据:lt_where edpline TYPE TABLE,
       lt_sel_list edpline类型表,
       l_wa_name TYPE字符串,
       ls_where TYPE edpline,
       l_具有TYPE字符串,
       dref TYPE REF TO数据,
       itab_type类型参考cl_abap_tabledescr,
       struct_type类型参考cl_abap_structdescr,
       elem_type类型参考cl_abap_elemdescr,
       comp_tab TYPE cl_abap_structdescr => component_table,
       comp_fld TYPE cl_abap_structdescr =>组件。

 类型:f_count个类型i。

 FIELD-SYMBOLS: TYPE ANY TABLE,
 *  TYPE ANY,
                  TYPE ANY。

 struct_type?= cl_abap_typedescr => describe_by_name(p_tabnam)。
 elem_type?= cl_abap_elemdescr => describe_by_name('F_COUNT')。
 comp_tab = struct_type-> get_components()。


 comp_fld-name ='F_COUNT'。
 comp_fld-type = elem_type。
 APPEND comp_fld至comp_tab。

 struct_type = cl_abap_structdescr => create(comp_tab)。
 itab_type = cl_abap_tabledescr => create(struct_type)。

 l_wa_name ='l_WA'。
 创建数据dref TYPE HANDLE itab_type。
 ASSIGN dref-> *至。
 *创建数据dref TYPE HANDLE struct_type。
 * ASSIGN dref-> *至。

 *选择字段的创建
 将p_selfl1附加到lt_sel_list。
 将" COUNT(*)AS F_COUNT"附加到lt_sel_list。

 **创建" where"子句
 * CONCATENATE p_selfl1'=''p_value''。'
 * INTO ls_where
 *按空格分隔。
 * APPEND ls_where到lt_where。

 *创建" where"子句
 追加p_where1到lt_where。

 *创建"具有"子句
 l_having ='count(*)> = 1'。

 *动态选择
 选择(lt_sel_list)
        FROM(p_tabnam)
        表的对应字段。
 *在(lt_where)。
付费偷看设置
发送
5条回答
CJones
1楼-- · 2020-08-18 22:31

嗨,

不要将CONCATENATE用于Select语句中的Where-Clause,而应将REPLACE与字段名和值一起使用。

这是逻辑:

 lt_where ='&=''&'''。
 用field_name INTO lt_where替换'&'。
 用field_value INTO lt_where替换'&'。

 选择(lt_sel_list)进入表的对应字段
 FROM(p_tabnam)
 在哪里(lt_where)。

谢谢\

Mahesh

槿木_熙
2楼-- · 2020-08-18 22:39

嗨,Sanket,

我上面给出的逻辑对您有用,将代码放在If条件中,然后尝试-

如下所示:

如果不是P_EBELN是初始的。

 lt_where ='&=''&'''。
 将p_ebeln的'&'替换为lt_where。
 用field_value INTO lt_where替换'&'。

 选择(lt_sel_list)进入表的对应字段
 FROM(p_tabnam)
 在(lt_where)。

 ENDIF。

谢谢\

Mahesh

悻福寶寶
3楼-- · 2020-08-18 22:32

我认为您的动态Where表为空....

转储的错误分析怎么说?

致谢

Priyank

太Q了
4楼-- · 2020-08-18 22:33

嗨priyank,

我已经按照您的建议更改了代码。 但是问题是我将值之后的时间段连接起来

(例如Equnr ='000000000010000000'。)

它穿过转储????。 无论如何,谢谢大家的宝贵建议。

木偶小白
5楼-- · 2020-08-18 22:30
 * CONCATENATE p_selfl1'=" p_value"。

删除该点"。"

一周热门 更多>