前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用CL_RS_WHERE创建dynamic SQL statement

使用CL_RS_WHERE创建dynamic SQL statement

作者头像
Jerry Wang
发布2019-07-03 11:19:14
5640
发布2019-07-03 11:19:14
举报

Created by Jerry Wang, last modified on May 31, 2014

select from field:

clipboard1
clipboard1

inner join statement:

clipboard2
clipboard2

where语句:

clipboard3
clipboard3

search结果:

clipboard4
clipboard4
代码语言:javascript
复制
REPORT zrs_where.
 
TYPES:

 BEGIN OF ty_product,

   product_id    TYPE comm_product-product_id,

   product_type  TYPE comm_product-product_type,

   upname        TYPE comm_product-upname,

   object_family TYPE comm_product-object_family,

   logsys        TYPE comm_product-logsys,

   short_text    TYPE comm_prshtext-short_text,

 END OF ty_product.

DATA :

 gt_prod TYPE STANDARD TABLE OF ty_product,

 ls_prod TYPE ty_product.
 
DATA: ob_select TYPE REF TO cl_rs_where.

DATA: ob_from   TYPE REF TO cl_rs_where.

DATA: ob_where  TYPE REF TO cl_rs_where,

     gv_source TYPE abapsource.
 
START-OF-SELECTION.
 
 PERFORM build_select.
 
 PERFORM build_from.
 
 PERFORM build_where.
 
 TRY.

     SELECT (ob_select->n_t_where)

         FROM (ob_from->n_t_where)

           INTO CORRESPONDING FIELDS OF TABLE gt_prod

           WHERE (ob_where->n_t_where).
 
   CATCH cx_root INTO DATA(cx_root).

     WRITE: / cx_root->get_text( ).

     RETURN.

 ENDTRY.

 BREAK-POINT.
 
 DEFINE add_select_field.

   CLEAR gv_source.

   CALL METHOD cl_rs_where=>build_tabname_fieldname

     EXPORTING

       i_tabname   = &1

       i_fieldname = &2

       i_sign      = '~'

     IMPORTING

       e_combined  = gv_source.
 
   ob_select->add_line( i_line = gv_source ).

 END-OF-DEFINITION.
 
FORM build_select .

 CREATE OBJECT ob_select.
 
 add_select_field 'COMM_PRODUCT'  'PRODUCT_ID'.

 add_select_field 'COMM_PRODUCT'  'PRODUCT_TYPE'.

 add_select_field 'COMM_PRODUCT'  'UPNAME'.

 add_select_field 'COMM_PRODUCT'  'OBJECT_FAMILY'.

 add_select_field 'COMM_PRODUCT'  'LOGSYS'.

 add_select_field 'COMM_PRSHTEXT' 'SHORT_TEXT'.
 
ENDFORM.
 
FORM build_from .

 CREATE OBJECT ob_from.
 
 ob_from->add_opening_bracket( ).
 
 gv_source = 'COMM_PRODUCT AS COMM_PRODUCT INNER JOIN COMM_PRSHTEXT AS COMM_PRSHTEXT'.
 
 ob_from->add_line( i_line = gv_source ).
 
 gv_source = 'ON COMM_PRODUCT~PRODUCT_GUID = COMM_PRSHTEXT~PRODUCT_GUID'.
 
 ob_from->add_line( i_line = gv_source ).
 
 ob_from->add_closing_bracket( ).

ENDFORM.
 
FORM build_where .

 DATA :

   lv_field      TYPE REF TO data,

   lv_field_low  TYPE REF TO data,

   lv_field_high TYPE REF TO data.

 CREATE OBJECT ob_where.
 
 DATA: lv_id TYPE comm_product-product_id VALUE 'ARNO_TEST004'.
 
 CALL METHOD ob_where->add_field

   EXPORTING

     i_fieldnm  = 'PRODUCT_ID'

     i_operator = '='

     i_intlen   = strlen( lv_id )

     i_datatp   = 'CHAR'

   IMPORTING

     e_r_field  = lv_field.
 
 CALL FUNCTION 'CONVERSION_EXIT_PRID1_INPUT'

   EXPORTING

     input  = lv_id

   IMPORTING

     output = lv_id.

 CALL METHOD ob_where->set_value_for_field

   EXPORTING

     i_fieldnm = 'PRODUCT_ID'

     i_value   = lv_id.
 
 CALL METHOD ob_where->add_and.
 
 CALL METHOD ob_where->add_field

   EXPORTING

     i_fieldnm  = 'PRODUCT_TYPE'

     i_operator = '='

     i_intlen   = 2

     i_datatp   = 'CHAR'

   IMPORTING

     e_r_field  = lv_field.
 
 CALL METHOD ob_where->set_value_for_field

   EXPORTING

     i_fieldnm = 'PRODUCT_TYPE'

     i_value   = '01'.

ENDFORM.
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年07月01日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Created by Jerry Wang, last modified on May 31, 2014
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档