动态SQL查询,动态内表
1.动态sql语句查询 简单来说,查询的字段,查询的表格,还有where条件都是变量。可以作为选择屏幕或者接口数据输入,最后得出输入条件的数据。具有通用性。 其中,动态查询的关键在于:sql语句查询结果所放置内表的创建。
2.源代码
PARAMETERS: p_field TYPE char200, p_table TYPE char10, p_whe TYPE char200. *第一种创建动态内表,根据所查询的字段,去生成内表 DATA: d_ref TYPE REF TO data, lt_alv_cat TYPE TABLE OF lvc_s_fcat, ls_alv_cat LIKE LINE OF lt_alv_cat. "根据填写的字段来自建内表 CONDENSE p_field NO-GAPS. "去掉空格, "p_field:填写字段规范: CARRID ,CONNID, FLDATE 最后一个字段不填逗号 "把填写的内容,根据逗号进行拆分 DATA:lt_field TYPE TABLE OF lvc_rfname. SPLIT p_field AT , INTO TABLE lt_field. "循环变成fieldcat LOOP AT lt_field INTO DATA(ls_field). *根据取出的字段目录生成参考字段目录 ls_alv_cat-fieldname = ls_field. "字段名 ls_alv_cat-ref_table = p_table. "参考表 ls_alv_cat-ref_table = p_table. "参考表 ls_alv_cat-ref_field = ls_field. "参考字段 APPEND ls_alv_cat TO lt_alv_cat. CLEAR: ls_alv_cat,ls_field. ENDLOOP. *内表创建 CALL METHOD cl_alv_table_create=>create_dynamic_table EXPORTING it_fieldcatalog = lt_alv_cat IMPORTING ep_table = d_ref. *指定生成的内表到字段符号 FIELD-SYMBOLS :<dyn_table> TYPE table. ASSIGN d_ref->* TO <dyn_table>. "动态SQL查询语句 SELECT (p_field) FROM (p_table) WHERE (p_whe) INTO CORRESPONDING FIELDS OF TABLE @<dyn_table>. IF sy-subrc = 0. "循环处理数据 * LOOP AT <dyn_table> ASSIGNING FIELD-SYMBOL(<wa>). * * ENDLOOP. "输出结果 cl_demo_output=>display( <dyn_table> ). ELSE. WRITE:SQL语句有误 . ENDIF. **"第二种:知道表就可以动态定义对应的内表和工作区 **"根据填入的表格取结构 **DATA:dyn_table TYPE REF TO data. **CREATE DATA dyn_table TYPE TABLE OF (p_table). ** **"定义指针内表 **FIELD-SYMBOLS: <dyn_table> TYPE table. **ASSIGN dyn_table->* TO <dyn_table>. ** *SELECT (p_field) FROM (p_table) WHERE (p_whe) INTO CORRESPONDING FIELDS OF TABLE @<dyn_table>. ** **IF sy-subrc = 0. ** CL_DEMO_output=>display( <dyn_table> ). **ELSE. ** WRITE:SQL语句有误 . **ENDIF.
下一篇:
基于redis实现的点赞功能设计