栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

关于用CL

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于用CL

先看这个例子:

TABLES:vbak.
SELECt-OPTIONS:vbeln FOR vbak-vbeln,
               auart FOR vbak-auart.

DATA(lv_where) = cl_shdb_seltab=>combine_seltabs(
                 it_named_seltabs = VALUE #(
                ( name = 'VBELN' dref = REF #( vbeln[] ) )
                ( name = 'AUART' dref = REF #( auart[] ) ) ) ).

  SELECT SINGLE * FROM vbak INTO @data(wa_vbak)
          WHERe (lv_where).

程序运行后dump了

通过查看notes:2669135 - Using class cl_shdb_seltab method combine_seltabs的解释,这个类 CL_SHDB_SELTAB是用来转换range tables成sql-where子句到HANA DB层使用的,而不是用来生成Open-SQL。这里顺便唠叨一下,我们要知道select-options不是SQL功能,它是一个ABAP(或OPEN SQL)功能,SQL脚本不能理解它,因此考虑将select-options变量(range)直接推送到数据库层是不可能的。所以就有了将这些select-options选项转换为SQL理解的where语句的需求,而AMDP可以帮我们实现这个需求。

notes的解释:

因此我们可以创建一个类似的AMDP类,然后在程序中使用它

 AMDP类暂时只能在ADT里面创建

CLASS zcl_amdp_select_options DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.
    INTERFACES if_amdp_marker_hdb.

    TYPES:zvbak_tab TYPE STANDARD TABLE OF vbak.
    CLASS-METHODS execute IMPORTING VALUE(iv_where_cond) TYPE string
                          EXPORTING VALUE(result)      TYPE zvbak_tab.
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.



CLASS zcl_amdp_select_options IMPLEMENTATION.
  METHOD execute BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT
                      OPTIONS READ-ONLY using vbak.
     RESULT = APPLY_FILTER(vbak, :iv_where_cond);
  ENDMETHOD.
ENDCLASS.

 在ADT new-abap class后激活就可以在ABAP程序中使用了。

TABLES:vbak.
SELECT-OPTIONS:vbeln FOR vbak-vbeln,
               auart FOR vbak-auart.

DATA(lv_where) = cl_shdb_seltab=>combine_seltabs(
                 it_named_seltabs = VALUE #(
                ( name = 'VBELN' dref = REF #( vbeln[] ) )
                ( name = 'AUART' dref = REF #( auart[] ) ) ) ).

*  SELECT SINGLE * FROM vbak INTO @data(wa_vbak)
*          WHERe (lv_where).

zcl_amdp_select_options=>execute(
  EXPORTING
    iv_where_cond = lv_where
  IMPORTING
    result = DATA(lt_itab) ).
READ TABLE lt_itab INTO DATA(wa_vbak) INDEX 1.

that's all,thanks...

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/986086.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号