ABAP动态生成经典应用之Dynamic SQL Excute 程序
开发说明:在SAP的系统维护过程中,有时我们需要修改一些Table中的数据,可是很多Table又不能直接在Tcode:SE16中修改,使用的SAP ID又没有调试数据修改权限,这时我们应该怎么样修改数据呢?思路--> ABAP程序中的SQL 更新语句谁都有权限执行,只要我们能动态生成修改该Table字段的ABAP CODE动态执行即可!
* (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.
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.
itab_prog LIKE abapsource OCCURS 0 WITH HEADER LINE.
SET PF-STATUS 'PFSTA00'.
WRITE: /1 'Edit Your SQL ................' COLOR 2.
IF sy-ucomm = 'EDIT'.
PERFORM editor_sql.
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.
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.
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.
IF sy-ucomm = 'EDEX'.
CALL FUNCTION 'EDITOR_APPLICATION'
EXPORTING
application = 'BF'
display = ' '
name = 'Modify Program...'
IMPORTING
fcode = fcode
TABLES
content = itab_prog.
STOP.
ENDIF.
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
AND ERSDA = '20040310'
ABAP动态生成经典应用之Dynamic SQL Excute 程序的更多相关文章
- WPF 动态生成对象属性 (dynamic)
原文:WPF 动态生成对象属性 (dynamic) 项目中列行的数据 都需要动态生成 所以考虑到对象绑定 可需要一个动态生成属性的意思 缺点 加载速度会慢 很明显的慢 解决办法 尽量减轻动态属性的量 ...
- ABAP 动态生成内表的几种方法
最近要写个程序,既有更新的,也有删除的,需要涉及到很多系统表,如果一个表一个表进行更新或者删除太慢了,于是就想通过创建动态内表来实现这些功能,在网上找了一些资料,经过多次尝试,终于测试成功了.网上讲述 ...
- WPF Datagrid 动态生成列 并绑定数据
原文:WPF Datagrid 动态生成列 并绑定数据 说的是这里 因为列头是动态加载的 (后台for循环 一会能看到代码) 数据来源于左侧列 左侧列数据源 当然num1 属于临时的dome使用 可 ...
- 动态生成ABAP程序-资料
参考程序: Tcode ABAPdocu--> BC - ABAP Programming--> The ABAP Programming Language--> Special T ...
- 即使用ADO.NET,也要轻量级动态生成更新SQL,比Ormlite性能更高
先上测试结果: //测试1000次针对同一个表同一个字段更新,比Ormlite平均快2.34倍 //生成SQL+ExecuteNonQuery Ormlite 倍数 //6513ms 15158ms ...
- 如何用asp.net MVC框架、highChart库从sql server数据库获取数据动态生成柱状图
如何用asp.net MVC框架.highChart库从sql server数据库获取数据动态生成柱状图?效果大概是这样的,如图: 请问大侠这个这么实现呢?
- 模拟Hibernate动态生成SQL语句
这里有一个xml配置文件,也就是Hibernate框架中会用到的POJO和数据库的映射文件 <?xml version="1.0" encoding="utf-8& ...
- java 动态生成SQL
代码如下: /** * 动态生成SQ及SQL参数L * @param ve 接收到的消息的CHGLIST * @param paramList MQ消息中的SQL参数 * @param t 泛型对象 ...
- 如何根据实体动态生成sql语句
该文章同时解决了,如何向数据库中添加Null值,以及如何处理“参数化查询未提供参数”的错误.解决方案请看第二段折叠的代码. 背景: 在项目开发的过程中,往往需要根据实体的值来修改sql语句,比如说,有 ...
随机推荐
- IOS URL无法对加号进行编码导致http请求时服务器端获取的内容中加号变成空格问题
一.背景. 将以下地址请求服务器时,如果postUrl中某个参数值包含符号+ 那么在服务器获取到这个参数值时,其加号变成了一个空格. NSString *postUrl = "http地址 ...
- Java 实例
Java 实例 本章节我们将为大家介绍 Java 常用的实例,通过实例学习我们可以更快的掌握 Java 的应用. Java 环境设置实例 Java 实例 – 如何编译一个Java 文件? Java 实 ...
- javascript洗牌算法 乱序算法 面试题
1.2种方案代码 <!DOCTYPE html> <html lang="zh"> <head> <meta charset=" ...
- 【VBA】复制单元格数据有效性
单元格内设置了有效性,通过VBA怎么去复制呢?代码如下: Public Sub 复制单元格批注() Dim range1 As range Dim range2 As range '清除G列 Colu ...
- 工作总结 npoi 模板 导出公式 excel
Apache POI(5):公式(formula) Apache POI(5):公式(formula) 2016年08月01日 17:44:49 阅读数:1145 package com.hthk ...
- brew Error: Formulae found in multiple taps
Mac PHP brew install php56-apcu Error: Formulae found in multiple taps: * homebrew/php/php56-apcu * ...
- thinkphp5.0极速搭建restful风格接口层实例
作为国内最流行的php框架thinkphp,很快就会发布v5.0正式版了,现在还是rc4版本,但已经很强大了下面是基于ThinkPHP V5.0 RC4框架,以restful风格完成的新闻查询(get ...
- 用Android Studio 执行ndk 程序
近期准备研究一下android双进程守护,因为此前用eclipse 写jni习惯了.如今主要用as 工具.在此也试着写个demo 然后在对双进程守护进行研究 1.所需工具 android studio ...
- SQL 时间格式转换
------- 获取当前时间 -------- DECLARE @currentTime varchar(); SET @currentTime = CONVERT(VARCHAR(),GETDATE ...
- MySQL中in(常量列表)的执行计划
我们在写sql的时候,经常用到in,in后面跟一堆常量列表,如id.有人说in的效率很高,而有人说很低:有人说in能使用索引,还有人说in不能使用索引... 到底是一个怎样的情况呢?我们分析以下几种情 ...