【转自http://blog.csdn.net/mysingle/article/details/678598】
开发说明:在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.数据修改效果确认
 
 
 
OK!Thank you~

ABAP动态生成经典应用之Dynamic SQL Excute 程序的更多相关文章

  1. WPF 动态生成对象属性 (dynamic)

    原文:WPF 动态生成对象属性 (dynamic) 项目中列行的数据 都需要动态生成 所以考虑到对象绑定  可需要一个动态生成属性的意思 缺点 加载速度会慢 很明显的慢 解决办法 尽量减轻动态属性的量 ...

  2. ABAP 动态生成内表的几种方法

    最近要写个程序,既有更新的,也有删除的,需要涉及到很多系统表,如果一个表一个表进行更新或者删除太慢了,于是就想通过创建动态内表来实现这些功能,在网上找了一些资料,经过多次尝试,终于测试成功了.网上讲述 ...

  3. WPF Datagrid 动态生成列 并绑定数据

    原文:WPF Datagrid 动态生成列 并绑定数据 说的是这里 因为列头是动态加载的 (后台for循环 一会能看到代码) 数据来源于左侧列 左侧列数据源 当然num1 属于临时的dome使用  可 ...

  4. 动态生成ABAP程序-资料

    参考程序: Tcode ABAPdocu--> BC - ABAP Programming--> The ABAP Programming Language--> Special T ...

  5. 即使用ADO.NET,也要轻量级动态生成更新SQL,比Ormlite性能更高

    先上测试结果: //测试1000次针对同一个表同一个字段更新,比Ormlite平均快2.34倍 //生成SQL+ExecuteNonQuery Ormlite 倍数 //6513ms 15158ms ...

  6. 如何用asp.net MVC框架、highChart库从sql server数据库获取数据动态生成柱状图

    如何用asp.net MVC框架.highChart库从sql server数据库获取数据动态生成柱状图?效果大概是这样的,如图: 请问大侠这个这么实现呢?

  7. 模拟Hibernate动态生成SQL语句

    这里有一个xml配置文件,也就是Hibernate框架中会用到的POJO和数据库的映射文件 <?xml version="1.0" encoding="utf-8& ...

  8. java 动态生成SQL

    代码如下: /** * 动态生成SQ及SQL参数L * @param ve 接收到的消息的CHGLIST * @param paramList MQ消息中的SQL参数 * @param t 泛型对象 ...

  9. 如何根据实体动态生成sql语句

    该文章同时解决了,如何向数据库中添加Null值,以及如何处理“参数化查询未提供参数”的错误.解决方案请看第二段折叠的代码. 背景: 在项目开发的过程中,往往需要根据实体的值来修改sql语句,比如说,有 ...

随机推荐

  1. Angular 学习笔记——自定义指令

    <!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="C ...

  2. iOS学习(项目中遇到的错误1)

    1.[AppModel copyWithZone:]: unrecognized selector sent to instance 0x7ffda9f4cf70 *** Terminating ap ...

  3. acd - 1403 - Graph Game(博弈 + 二分图最大匹配)

    题意:N与P在玩游戏,N有 n1 个点,P有 n2 个点,N的点与P的点之间有 m 条无向边.将一个石子放在当中一点.N先移动石子.沿边移动一次,石子移动前的点及与该点相连的边被删除.接着到P移动石子 ...

  4. Jmeter3.0-插件管理

    本文转自推酷:http://www.tuicool.com/articles/UV7fI3V JMeter ,老牌,开源,轻量,Apache基金会的顶级项目,光是这些关键字就足以让大量用户将其纳入自己 ...

  5. shell统计一个文件里某行出现的次数并排序

    话说有个aaa.txt文件,文件内容如下: aaaabbbbccccddddeeeeffffmmmmooooaaaaccccaaaabbbbddddaaaammmmbbbbaaaaoooo 然后面试题 ...

  6. vbox克隆虚拟机,网卡启动报错“Device eth0 does not seem to be present”

    vbox克隆虚拟机,网卡启动报错"Device eth0 does not seem to be present". 须要看以下三个地方:确保文件名称,设备名.mac地址都一致. ...

  7. sublime 插件(持续更新)

    sublime text 3创建新文件插件-AdvanceNewFile 这里要记录sublime text 3 在创建新文件时安装的插件–AdvanceNewFile ST本来自带的创建新文件的快捷 ...

  8. Java编程之路相关书籍(三个维度)

    一.关于Java的技术学习.能够依照以下分三个维度进行学习 : (1)向下发展,也就是底层的方向 建议看<深入Java虚拟机>.<Java虚拟机规范>.<Thinking ...

  9. UVA-11625-Nice Prefixes (DP+矩阵快速幂)

    题目(vjudge) 题面 题意: 你有K个字母,你需要用K个字母组成L长度的字符串,定义对于该字符串的任意前缀P 必须满足    ,输出方案数%1000000007的值. 思路: 首先可以想到一种简 ...

  10. 【Atheros】网卡驱动速率调整算法概述

    我做网卡驱动,最主要的内容就是设计和改进速率调整算法,随着802.11协议簇的新标准越来越多,速率越来越高,调制编码方式也越来越多,一般来说,速率越高越可能丢包,速率越低越稳定,这是整体状况,但不是必 ...