• 如何对SAP数据库表进行增删改查操作(3)


    之前写过几篇:

    如何对SAP数据库表进行增删改查操作
    如何对SAP数据库表进行增删改查操作(2)
    Functional ALV系列 (05) - ALV 作为数据编辑界面

    本次来看看如何在不用编码的方式来修改 SAP 表中的数据,主要解决临时性修改的需求。

    RS_TABLE_LIST_CREATE 函数

    经测试,RS_TABLE_LIST_CREATE 函数在表没有维护维护视图的时候,可以作为一个方便的数据维护方法。在进入界面之前,可以对需要维护的数据进行选择。在我的 SAP 系统中,有两个用于测试的表,zemployee 创建了 table maintenance generator (即可以用 SM30 来维护),zemployee1 没有创建 table maintenance generator。

    此时,通过 SE37 对 RS_TABLE_LIST_CREATE 函数的使用进行测试。

    可以进入 display 界面,但不能维护数据:

    而 zemployee1 数据表,因为没有创建 table maintenance generator,则可以用此函数来维护:

    对于没有创建“维护视图”的表,这种方法比其它方法更加便捷,对于维护了维护视图的表来说,该函数也是调用 view_maintenance_call。需要能找到响应的 view,比如 T001 表,V_T001 表就是用于维护 T001 表的视图。

    SE16N_INTERFACE 函数

    该函数对任意表都可以进行增删改查操作,如果表的行数太多,可能不方便找到相应的行项目。假设我们想要修改 T001 表:

    将 I_EDIT 参数和 I_SAPEDIT 参数的值设置为 X 即可。

    网上比较流行的基于调试更改 gd-edit 参数和 gd-sapedit 参数的方式,跟这个方法是相同的原理。

    因为讲述这个方法的文章太多,这里就不必重复了。如果需要临时修改表数据,调试的方法比 SE16N_INTERFACE 容易定位行一些。

    DB**TABLE 函数

    SAP 提供了一系列函数,用于操作数据库表的数据,包括:

    由于这些函数需要基于内表来操作数据,使用 SE37 测试的方式来执行并不合适,这些函数也不能在外部使用。简单演示以下 ABAP 方式如何使用。

    report  z_update_db.
    
    data: gt_zstu like table of zstu,
          gs_zstu like line of gt_zstu.
    
    start-of-selection.
      clear gs_zstu.
      gs_zstu-mandt = '001'.
      gs_zstu-zstuid = '6'.
      gs_zstu-zsname = '布鲁克'.
      append gs_zstu to gt_zstu.
    
      call function 'DB_UPDATE_TABLE'
        exporting
          tablename            = 'ZSTU'
    *   IMPORTING
    *     SQLCODE              =
        tables
          inttab               = gt_zstu
       exceptions
         db_error             = 1
         not_found            = 2
         wrong_param          = 3
         internal_error       = 4
         others               = 5
                .
      if sy-subrc <> 0.
        if sy-subrc eq 1.
          write 'Database error'.
        elseif sy-subrc eq 2.
          write 'Not found'.
        else.
          write 'Other errors'.
        endif.
      endif.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    report  z_insert_db.
    
    data: gt_zstu like table of zstu,
          gs_zstu like line of gt_zstu.
    
    start-of-selection.
      clear gs_zstu.
      gs_zstu-mandt = '001'.
      gs_zstu-zstuid = '7'.
      gs_zstu-zsname = '罗宾劳利'.
      append gs_zstu to gt_zstu.
    
      call function 'DB_INSERT_TABLE'
        exporting
          tablename            = 'ZSTU'
    * IMPORTING
    *   SQLCODE              =
        tables
          inttab               = gt_zstu
       exceptions
         db_error             = 1
         duplicate_key        = 2
         wrong_param          = 3
         internal_error       = 4
         others               = 5
                .
      if sy-subrc <> 0.
        if sy-subrc eq 1.
          write 'Database error'.
        elseif sy-subrc eq 2.
          write 'duplicate key'.
        else.
          write 'Other errors'.
        endif.
      endif.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
  • 相关阅读:
    java毕业设计高校毕业生就业管理系统mybatis+源码+调试部署+系统+数据库+lw
    腾讯待办停止运营,怎么继续提醒事情呢?
    RibbonBar
    一文解决Vue中实现 Excel下载到本地以及上传Excel
    【Docker】Docker常用命令(包含Dockerfile指令)
    使用AutoJs编写UI的踩坑记录
    Scala基础教程--13--函数进阶
    《TCP/IP网络编程》--基于TCP实现字符串对话和文件传输
    flask 支付宝的使用
    FTP无法在资源管理器中打开
  • 原文地址:https://blog.csdn.net/stone0823/article/details/126823964