开发说明:在SAP的系统维护过程中,有时我们需要修改一些Table中的数据,可是很多Table又不能直接在Tcode:SE16中修改,使用的SAP ID又没有调试数据修改权限,这时我们应该怎么样修改数据呢?思路--> ABAP程序中的SQL 更新语句谁都有权限执行,只要我们能动态生成修改该Table字段的ABAP CODE动态执行即可!
开发技术:
1.SQL代码编写技术
1.动态程序代码生成技术
2.ABAP动态程序执行技术
注意事项:
SQL语法一定要准确,修改条件准确,修改数据后不违法数据唯一性原则
程序代码:如下
*******************************************************************
* (Copyright @2006 Mysingle Digital System Co.Ltd.
* All Rights Reserved|Confidential)
* System Module   :  ABAP CBO
* Program Description  :  Dynamic SQL Excute
* Developer         :  ZOU XIN
* Develop Date   :  2006.03.01
* Use Status   :  Release 1.0
*******************************************************************
REPORT z_cbo_abap_02 MESSAGE-ID zp NO STANDARD PAGE HEADING.
DATA : fcode LIKE sy-ucomm,
       changed LIKE s38e-buf_varied,
       save_tabix  LIKE sy-tabix,
       tabix_count TYPE i,
       select_key(10) TYPE c,
       etc(80)  TYPE c,
       update_flag  TYPE c,
       line_cnt     TYPE i,
       prog(8)      TYPE c,
       msg(120)     TYPE c,
       msg_text(72) TYPE c,
       confirm_flag TYPE c.
DATA: itab_sql LIKE abapsource OCCURS 0 WITH HEADER LINE,
      itab_prog LIKE abapsource OCCURS 0 WITH HEADER LINE.
START-OF-SELECTION.
*程序执行直接进入ABAP代码编辑器
  SET PF-STATUS 'PFSTA00'.
  WRITE: /1 'Edit Your SQL ................' COLOR 2.
AT USER-COMMAND.
*动态生成程序修改确认
  IF sy-ucomm = 'EDIT'.
    PERFORM editor_sql.
*动态生成程序执行
ELSEIF sy-ucomm = 'EXEC' OR sy-ucomm = 'EDEX'.
    REFRESH itab_prog.
    CLEAR itab_prog.
    IF update_flag = 'X'.
      PERFORM exec_modify.
    ENDIF.
  ENDIF.
*&------------------------------------------------------------------*
*&      Form  editor_sql
*&------------------------------------------------------------------*
FORM editor_sql.
* CALL Editor
  CALL FUNCTION 'EDITOR_APPLICATION'
       EXPORTING
            application = 'BF'
            display     = ' '
            name        = '[Edit Your SQL......]'
       IMPORTING
            fcode       = fcode
            changed     = changed
       TABLES
            content     = itab_sql.
* Translate Code Upper
  LOOP AT itab_sql.
    save_tabix  = sy-tabix.
    tabix_count = tabix_count + 1.
    IF itab_sql-line = space OR itab_sql-line+(1) = '*'.
      DELETE itab_sql INDEX save_tabix.
    ENDIF.
    TRANSLATE itab_sql-line TO UPPER CASE.
    MODIFY itab_sql INDEX save_tabix.
  ENDLOOP.
* Parsing input SQL code
  LOOP AT itab_sql.
    IF sy-tabix = 1.
      SHIFT itab_sql-line LEFT DELETING LEADING space.
    ENDIF.
    save_tabix = sy-tabix + 1.
    SPLIT itab_sql-line AT space INTO select_key etc.
    IF select_key = 'SELECT'.
      MESSAGE i433 WITH 'Donot support select syntax!^~^'.
      stop.
* hehe~~Don't bother myself.
    ELSEIF select_key = 'DELETE' OR  select_key = 'UPDATE'
       OR  select_key = 'INSERT'.
      update_flag = 'X'.
    ENDIF.
  ENDLOOP.
* Display the SQL code
  sy-lsind = 0.
  DELETE itab_sql WHERE line IS initial.
  DESCRIBE TABLE itab_sql LINES line_cnt.
  IF line_cnt = 0.
    WRITE: /1 'Edit Your SQL ................' COLOR 2.
  ELSE.
    LOOP AT itab_sql.
      WRITE: /1 itab_sql-line.
    ENDLOOP.
  ENDIF.
  IF update_flag = 'Y'.
    EXIT.
  ENDIF.
ENDFORM.                    " editor_sql
*&------------------------------------------------------------------*
*&      Form  exec_modify
*&------------------------------------------------------------------*
FORM exec_modify.
  IF sy-ucomm = 'EXEC'.
* Modify dialog box
    CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
         EXPORTING
              textline1 = 'Do you want to really UPDATE?'
              titel     = 'Exit'
         IMPORTING
              answer    = confirm_flag.
    CASE confirm_flag.
      WHEN 'N'. EXIT. "NO
      WHEN 'A'. EXIT. "Cancel
      WHEN 'J'. "perform exec_sql_update. "YES
    ENDCASE.
  ENDIF.
* Modify Program ABAP Code.
  itab_prog-line = 'PROGRAM ZSQL19800526 MESSAGE-ID AT.'.
  APPEND itab_prog.
  itab_prog-line = 'DATA: COUNT TYPE I.'.
  APPEND itab_prog.
  itab_prog-line = 'FORM DYN2.'.
  APPEND itab_prog.
  itab_prog-line = 'EXEC SQL.'.
  APPEND itab_prog.
  LOOP AT itab_sql.
    itab_prog-line = itab_sql-line.
    APPEND itab_prog.
  ENDLOOP.
  itab_prog-line = 'ENDEXEC.'.
  APPEND itab_prog.
  itab_prog-line = 'MESSAGE I315 WITH ''Performed'' SY-DBCNT'.
  CONCATENATE itab_prog-line '''' 'Records!^-^' '''' '.'
              INTO itab_prog-line SEPARATED BY space.
  APPEND itab_prog.
  itab_prog-line = 'ENDFORM.'.
  APPEND itab_prog.
* Dynamic Program Display
  IF sy-ucomm = 'EDEX'.
    CALL FUNCTION 'EDITOR_APPLICATION'
         EXPORTING
              application = 'BF'
              display     = ' '
              name        = 'Modify Program...'
         IMPORTING
              fcode       = fcode
         TABLES
              content     = itab_prog.
    STOP.
  ENDIF.
* Dynamic Program Excuted
  GENERATE SUBROUTINE POOL itab_prog NAME prog
                                     MESSAGE msg.
  IF sy-subrc <> 0.
    msg_text = msg+(80).
    WRITE: /1 msg_text.
    msg_text = msg+80(40).
    WRITE: /1 msg_text.
  ELSE.
    PERFORM dyn2 IN PROGRAM (prog).
  ENDIF.
ENDFORM.                    " exec_modify
程序实例:
 
1.程序执行界面,显示SQL CODE录入画面

2.我们要修改的数据,材料主数据Material Master Table:MARA中的材料CODE主键
SOH-DL3C ---> SOH-DL8C
3.数据修改SQL语句编写,这里就不详叙了
UPDATE MARA SET MATNR = 'SOH-DL3C' WHERE MATNR = 'SOH-DL8C'
                                    AND ERSDA = '20040310'

4.修改动态ABAP程序生成确认修改
5.动态程序执行
6.程序成功执行提示信息
7.数据修改效果确认

ABAP动态生成经典应用之Dynamic SQL Excute 程序相关推荐

  1. ABAP动态生成经典应用之Table数据Upload 程序

    开发说明:在CBO的程序开发过程中,需要为Table准备大量的测试数据,手动录入效率低,不专业,我们可以采用其他的高级编辑工具(例如:EXCEL,EditPlus)按照Table数据存储结构准备好数据 ...

  2. 动态生成JSP文件,并调用JSP程序

    2019独角兽企业重金招聘Python工程师标准>>> 下面这个JSP程序,动态生成可一个testDynamicInclude.inc.jsp,然后在后面调用它. 在JSP的动态生成 ...

  3. ABAP动态生成内表的三种方法

    动态内表的创建和使用主要有以下几点: 动态内表的创建,首先要定义动态结构,然后再根据定义的动态结构利用系统一个标准的method:"cl_ALV_table_create=>creat ...

  4. oracle生成主键函数,Oracle学习记录之使用自定义函数和触发器实现主键动态生成...

    很早就想自己写写Oracle的函数和触发器,最近一个来自课本的小案例给了我这个机会.现在把我做的东西记录下来,作为一个备忘或者入门的朋友们的参考. 案例介绍: 招投标管理系统(数据库设计). 数据表有 ...

  5. java在linux生成pdf文件,从 Java 应用程序动态生成 PDF 文件

    简介: 如果您的应用程序需要动态生成 PDF 文档,那么您需要 iText 库.开源的 iText 库使得 PDF 的创建变得轻松易行.本文介绍了 iText 并提供了一个使用它从 Java 技术应用 ...

  6. 字节码编程 | 使用Javassist动态生成Hello World

    大家好,我是冰河~~ 字节码编程在实际的业务开发(CRUD)中并不常用,但是随着网络编程,RPC.动态字节码增强技术和自动化测试以及零侵入APM监控的不断发展与大量使用,越来越多的技术需要使用到字节码 ...

  7. ABAP 动态 SQL

    ABAP的sql语句是可以动态生成的,这个特性可以带给我们很多的便利. 比如SAP对费用的存储结构可能会采用 将会计月作为栏位的情况,及 period001,period002...等这样方式来存储值 ...

  8. ABAP动态编程-动态生成子例程和本地类-GENERATE SUBROUTINE POOL

    目录 前言 1. 动态生成子例程并调用 2. 动态生成本地类并调用 前言 本文为ABAP编程中动态生成子例程/本地类的简单示例,依托语句GENERATE SUBROUTINE POOL实现. 1. 动 ...

  9. MyBatis Dynamic SQL(一)— 真正的Mybatis动态sql — MyBatis Dynamic SQL

    目录 现状 MyBatis Dynamic SQL 项目地址 官方文档 项目介绍 作者 Mybatis Generator 简介 特性 目标 提示 快速使用 步骤 定义常量Tables和Columns ...

最新文章

  1. IDEA 快捷键 Android Studio快捷键
  2. 国庆期间,我造了台计算机
  3. 利用linux shell自己主动顶贴
  4. 前端学习(1263):post方式的参数传递
  5. 【本地差分隐私与随机响应代码实现】差分隐私代码实现系列(十三)
  6. Windows Phone 7 优秀开源项目概览 来源:http://www.cnblogs.com/porscheyin/archive/2010/12/15/1906476.html...
  7. Java用itext工具根据模板生成PDF
  8. 【Python爬虫】之西瓜视频地址解密20210822
  9. Snipaste截图软件安装、使用详细教程(附下载链接)
  10. Segue区别及视图的切换
  11. win10linux系统双系统,win10安装linux双系统的方法是什么_win10装linux双系统的方法...
  12. Server 2008系统安装驱动提示“无法验驱动程序数字签名”怎么办?
  13. 与计算机相关的伟人,计算机发展史上最有影响的伟人
  14. c# asp.net web程序获取当前文件路径
  15. 大数据之路——数据挖掘
  16. jQuery 08-13
  17. Amazon 4.7 星评,领域新经典,了解服务设计就读它
  18. 手机病毒肆虐:恶意软件每天获取超3000美元收益
  19. 如何精确评估开发时间?
  20. Jmeter多线程并发和压测结果分析

热门文章

  1. python 数据分析基础 day1-初窥内容
  2. 初探AngularJS6.x---目录结构说明
  3. kali下Wreckuests | DDOS Atacks With HTTP-Flood
  4. Android自定义属性、控件三步法
  5. phpcms /api/phpsso.php SQL Injection Vul
  6. mySQL教程 第9章 触发器
  7. Oracle Enterprise Linux
  8. 读取jar包内部配置文件信息的解析
  9. 安装visual studio 2013--【转】
  10. 获取个人借阅信息---图书馆client