ABAP-动态创建DATABASE/FUNCTION(风险)
警告:此程序仅供研究,请谨慎操作,切勿对系统标准数据表及功能函数进行测试(可能无法修复)。
程序:EWUCINS
REPORT EWUCINS MESSAGE-ID US NO STANDARD PAGE HEADING. * Administrieren Cluster und parallele Tasks PARAMETERS: TESTRUN DEFAULT 'X', "test B(reak), C(alled) P_FKT() DEFAULT 'SIZ'."SIZ,INS,DEL TABLES: TAORA, TAINF. DATA: H_RUNTI TYPE F. DATA: BEGIN OF T_DBAFREE OCCURS , NAME(), BYTES TYPE I, END OF T_DBAFREE, H_TABNAME LIKE DD02L-TABNAME VALUE 'EWUCLU'. DATA: BEGIN OF T_DBAONLINE OCCURS , NAME(), STATUS(), END OF T_DBAONLINE. DATA: RC LIKE SY-SUBRC. AT SELECTION-SCREEN OUTPUT. *f sy-subty = '04'. "dialog IF TESTRUN <> 'C'. "dialog P_FKT = 'SIZ'. ENDIF. START-OF-SELECTION. ******************************************************* * Write out Parameters ******************************************************* PERFORM WRITE_PARMS. GET RUN TIME FIELD H_RUNTI. ************************************************************************ * functions ************************************************************************ CASE P_FKT. * available freespace in db ------------------------------------------* WHEN 'SIZ'. IF SY-DBSYS = 'ORACLE' OR SY-DBSYS = 'INFORMIX'. PERFORM SEL_DBAFREE. ELSE. * installation --------------------------------------------------------* * when 'INS'. TAORA-TABART = 'APPL0'. PERFORM CREATE_TABLE. PERFORM CREATE_FUNCTION. ENDIF. * drop ewuclu --------------------------------------------------------* WHEN 'DEL'. PERFORM DELETE_TABLE. ENDCASE. GET RUN TIME FIELD H_RUNTI. * IF testrun = 'B'. BREAK-POINT. ENDIF. WRITE: / 'runtime:', H_RUNTI, / 'endtime:', SY-UZEIT. COMMIT WORK. IF TESTRUN = 'C'. LEAVE PROGRAM. ENDIF. "called STOP. *----------------------------------------------------------------------* AT LINE-SELECTION. T_DBAFREE-name = SY-LISEL(). WRITE: / T_DBAFREE-NAME, 'wurde ausgewählt'(). PERFORM FIND_TABLE_DETAIL. PERFORM CREATE_TABLE. PERFORM CREATE_FUNCTION. *----------------------------------------------------------------------* FORM APPEND_DBAFREE. IF SY-SUBRC = . APPEND T_DBAFREE. ENDIF. ENDFORM. FORM APPEND_DBAONLINE. IF SY-SUBRC = . APPEND T_DBAONLINE. ENDIF. ENDFORM. *----------------------------------------------------------------------* FORM SEL_DBAFREE. CASE SY-DBSYS. WHEN 'ORACLE'. EXEC SQL PERFORMING APPEND_DBAFREE. SELECT TABLESPACE_NAME, SUM(NVL(BYTES,))/ FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME INTO :T_DBAFREE ENDEXEC. EXEC SQL PERFORMING APPEND_DBAONLINE. SELECT TABLESPACE_NAME, STATUS FROM DBA_TABLESPACES INTO :T_DBAONLINE ENDEXEC. LOOP AT T_DBAONLINE. IF T_DBAONLINE-STATUS = 'OFFLINE'. DELETE T_DBAFREE WHERE NAME = T_DBAONLINE-NAME. ENDIF. ENDLOOP. WHEN 'INFORMIX'. PERFORM LISTE_DBSPACES_CREATE. WHEN OTHERS. WRITE: / 'DB not implemented'. STOP. ENDCASE. SORT T_DBAFREE BY BYTES DESCENDING. IF TESTRUN <> 'C'. LOOP AT T_DBAFREE. IF SY-TABIX = . WRITE: / 'Tablespace', 'Freespace(KB)'. ENDIF. WRITE: / T_DBAFREE-NAME, T_DBAFREE-BYTES. ENDLOOP. * automatically find biggest freespace ELSE. LOOP AT T_DBAFREE. IF T_DBAFREE-NAME() <> 'PSAPROLL' AND T_DBAFREE-NAME() <> 'PSAPTEMP' AND T_DBAFREE-NAME() <> 'SYSTEM'. PERFORM FIND_TABLE_DETAIL. PERFORM CREATE_TABLE. PERFORM CREATE_FUNCTION. EXIT. ENDIF. ENDLOOP. ENDIF. ENDFORM. *----------------------------------------------------------------------* FORM FIND_TABLE_DETAIL. * tabellenart (appl0) bestimmt tablespace/dbspace CASE SY-DBSYS. WHEN 'ORACLE'. SELECT SINGLE * FROM TAORA WHERE TABSPACE = T_DBAFREE-NAME. WHEN 'INFORMIX'. TAINF-DBSPACES = T_DBAFREE-NAME. TRANSLATE TAINF-DBSPACES TO UPPER CASE. "#EC TRANSLANG SELECT SINGLE * FROM TAINF WHERE DBSPACES = TAINF-DBSPACES. TAORA-TABART = TAINF-TABART. ENDCASE. IF SY-SUBRC <> . * write: / 'tabart not found'. * exit. TAORA-TABART = 'APPL0'. IF SY-DBSYS = 'ORACLE'. DATA: PROG() OCCURS WITH HEADER LINE. TABLES: DD02L. PROG = 'report x. '. APPEND PROG. PROG = 'tables: dd02ora. '. APPEND PROG. IF SY-SAPRL >= '31I'. PROG = 'tables: ddstorage. '. APPEND PROG. ENDIF. PROG = 'form insert_dd02ora. '. APPEND PROG. CONCATENATE 'dd02ora-tabname = ''' H_TABNAME '''.' INTO PROG. APPEND PROG. CONCATENATE 'delete from dd02ora where tabname = ''' H_TABNAME '''.' INTO PROG. APPEND PROG. PROG = 'dd02ora-source = ''USR''. '. APPEND PROG. PROG = 'dd02ora-useflag = ''X''. '. APPEND PROG. CONCATENATE 'dd02ora-tabspace = ''' T_DBAFREE-NAME '''.' INTO PROG. APPEND PROG. PROG = 'dd02ora-init = ''''. '. APPEND PROG. PROG = 'dd02ora-next = ''''. '. APPEND PROG. PROG = 'dd02ora-minext = ''''. '. APPEND PROG. PROG = 'dd02ora-maxext = ''''. '. APPEND PROG. PROG = 'dd02ora-pctinc = ''''. '. APPEND PROG. PROG = 'dd02ora-ofreelist = ''''. '. APPEND PROG. PROG = 'dd02ora-ofreegroup = ''''. '. APPEND PROG. PROG = 'dd02ora-opctfree = ''''. '. APPEND PROG. PROG = 'dd02ora-opctused = ''''. '. APPEND PROG. PROG = 'insert dd02ora. '. APPEND PROG. PROG = 'endform. '. APPEND PROG. DATA: H_GENPROG LIKE TRDIR-NAME. * break-point. GENERATE SUBROUTINE POOL PROG NAME H_GENPROG MESSAGE PROG. PERFORM INSERT_DD02ORA IN PROGRAM (H_GENPROG). ENDIF. ENDIF. ENDFORM. *----------------------------------------------------------------------* FORM CREATE_TABLE. DATA: I_DD02V_WA LIKE DD02V, I_DD09L_WA LIKE DD09L, I_DD03P_TAB LIKE DD03P OCCURS WITH HEADER LINE. * Header I_DD02V_WA-TABNAME = H_TABNAME. I_DD02V_WA-DDLANGUAGE = 'D'. I_DD02V_WA-DDTEXT = '_conv_ Cluster'. I_DD02V_WA-TABCLASS = 'TRANSP'. I_DD02V_WA-CONTFLAG = 'L'. * Technical Settings I_DD09L_WA-TABNAME = H_TABNAME. I_DD09L_WA-TABKAT = ''. I_DD09L_WA-TABART = TAORA-TABART. *_dd09l_wa-bufalow = 'N'. * Fields I_DD03P_TAB-TABNAME = H_TABNAME. I_DD03P_TAB-DDLANGUAGE = 'D'. I_DD03P_TAB-FIELDNAME = 'MANDT'. I_DD03P_TAB-POSITION = ''. I_DD03P_TAB-KEYFLAG = 'X'. I_DD03P_TAB-DATATYPE = 'CLNT'. I_DD03P_TAB-LENG = ''. APPEND I_DD03P_TAB. I_DD03P_TAB-FIELDNAME = 'RELID'. I_DD03P_TAB-POSITION = ''. I_DD03P_TAB-KEYFLAG = 'X'. I_DD03P_TAB-DATATYPE = 'CHAR'. I_DD03P_TAB-LENG = ''. APPEND I_DD03P_TAB. I_DD03P_TAB-FIELDNAME = 'UMSID'. I_DD03P_TAB-POSITION = ''. I_DD03P_TAB-KEYFLAG = 'X'. I_DD03P_TAB-DATATYPE = 'CHAR'. I_DD03P_TAB-LENG = ''. APPEND I_DD03P_TAB. I_DD03P_TAB-FIELDNAME = 'PAGENO'. I_DD03P_TAB-POSITION = ''. I_DD03P_TAB-KEYFLAG = 'X'. I_DD03P_TAB-DATATYPE = 'INT4'. I_DD03P_TAB-LENG = ''. APPEND I_DD03P_TAB. I_DD03P_TAB-FIELDNAME = 'CLUSTR'. I_DD03P_TAB-POSITION = ''. I_DD03P_TAB-KEYFLAG = ' '. I_DD03P_TAB-DATATYPE = 'INT2'. I_DD03P_TAB-LENG = ''. APPEND I_DD03P_TAB. I_DD03P_TAB-FIELDNAME = 'CLUSTD'. I_DD03P_TAB-POSITION = ''. I_DD03P_TAB-KEYFLAG = ' '. I_DD03P_TAB-DATATYPE = 'LRAW'. I_DD03P_TAB-LENG = ''. APPEND I_DD03P_TAB. CALL FUNCTION 'DDIF_TABL_PUT' EXPORTING NAME = H_TABNAME DD02V_WA = I_DD02V_WA DD09L_WA = I_DD09L_WA TABLES DD03P_TAB = I_DD03P_TAB * DD05M_TAB = * DD08V_TAB = EXCEPTIONS TABL_NOT_FOUND = NAME_INCONSISTENT = TABL_INCONSISTENT = PUT_FAILURE = PUT_REFUSED = OTHERS = . IF SY-SUBRC <> . MESSAGE e306(mq) WITH text-. "'Table create error'. ENDIF. CALL FUNCTION 'DDIF_TABL_ACTIVATE' EXPORTING NAME = H_TABNAME AUTH_CHK = 'X' * PRID = -1 IMPORTING RC = RC EXCEPTIONS NOT_FOUND = PUT_FAILURE = OTHERS = . IF SY-SUBRC <> OR RC = . MESSAGE E341(MQ). LEAVE PROGRAM. ENDIF. CALL FUNCTION 'TRINT_TADIR_INSERT' EXPORTING * AUTHOR = SY-UNAME * MASTERLANG = ' ' DEVCLASS = 'ECLU' * GENFLAG = ' ' OBJECT = 'TABL' OBJ_NAME = 'EWUCLU' PGMID = 'R3TR' SRCSYSTEM = 'SAP' * IMPORTING * ES_TADIR = EXCEPTIONS OBJECT_EXISTS_GLOBAL = OBJECT_EXISTS_LOCAL = OTHERS = . IF SY-SUBRC = . MESSAGE e306(mq) WITH text-. "'tadir insert error' ENDIF. * SUBMIT EWUCADM * WITH TESTRUN = 'X' * WITH P_FKT = 'DIR' * WITH P_MAXTSK = ' ' * WITH P_PROG = ' ' * WITH P_BATCH = ' ' * WITH P_RELID = ' ' * WITH P_CLUSIZ = ' '. ENDFORM. *----------------------------------------------------------------------* FORM DELETE_TABLE. CALL FUNCTION 'DB_DROP_TABLE' EXPORTING * DBSYS = SY-DBSYS * NO_EXEC = ' ' * PRID = 0 * PROGNAME = ' ' TABNAME = 'EWUCLU' * DB_CHECK_FLAG = ' ' * IMPORTING * GENPROG = * SUBRC = EXCEPTIONS PROGRAM_NOT_GENERATED = PROGRAM_NOT_WRITTEN = TABLE_NOT_DROPPED = OTHERS = . IF SY-SUBRC <> . MESSAGE e306(mq) WITH text-. ENDIF. CALL FUNCTION 'DD_TABL_DEL' EXPORTING TABNAME = 'EWUCLU' DEL_STATE = 'A' * PRID = 0 EXCEPTIONS OTHERS = . IF SY-SUBRC <> . MESSAGE e306(mq) WITH text-. ENDIF. CALL FUNCTION 'TRINT_TADIR_DELETE' EXPORTING OBJECT = 'TABL' OBJ_NAME = 'EWUCLU' PGMID = 'R3TR' EXCEPTIONS TADIR_ENTRY_NOT_EXISTING = OBJECT_EXISTS = OTHERS = . IF SY-SUBRC = . MESSAGE e306(mq) WITH text- . ENDIF. ENDFORM. *----------------------------------------------------------------------* FORM CREATE_FUNCTION. CALL FUNCTION 'FUNCTION_POOL_CREATE' EXPORTING POOL_NAME = 'ZCNV' * RESPONSIBLE = SY-UNAME SHORT_TEXT = '_conversion_' * NAMESPACE = ' ' EXCEPTIONS NAME_ALREADY_EXISTS = NAME_NOT_CORRECT = OTHERS = . IF SY-SUBRC <> AND SY-SUBRC <> . MESSAGE e306(mq) WITH text-. "Function pool error ENDIF. DATA: I_RSEXC LIKE RSEXC OCCURS WITH HEADER LINE. DATA: I_RSEXP LIKE RSEXP OCCURS WITH HEADER LINE. DATA: I_RSIMP LIKE RSIMP OCCURS WITH HEADER LINE. DATA: I_RSFSO LIKE RSFSO OCCURS WITH HEADER LINE. DATA: I_RSTBL LIKE RSTBL OCCURS WITH HEADER LINE. DATA: I_RSCHA LIKE RSCHA OCCURS WITH HEADER LINE. TABLES: RS38L. I_RSIMP-PARAMETER = 'TESTRUN'. I_RSIMP-DBFIELD = 'TRDIR-SQLX'. APPEND I_RSIMP. I_RSIMP-PARAMETER = 'PROGNAME'. I_RSIMP-DBFIELD = 'TRDIR-NAME'. APPEND I_RSIMP. I_RSIMP-PARAMETER = 'FUNKTION'. I_RSIMP-DBFIELD = 'TRDIR-TYPE'. APPEND I_RSIMP. I_RSIMP-PARAMETER = 'UMSID'. I_RSIMP-DBFIELD = 'EWUCLU-UMSID'. APPEND I_RSIMP. I_RSIMP-PARAMETER = 'UMSI2'. I_RSIMP-DBFIELD = 'EWUCLU-UMSID'. APPEND I_RSIMP. I_RSIMP-PARAMETER = 'TSKNO'. I_RSIMP-DBFIELD = 'EWUCLU-RELID'. APPEND I_RSIMP. I_RSIMP-PARAMETER = 'RELID'. I_RSIMP-DBFIELD = 'EWUCLU-RELID'. APPEND I_RSIMP. I_RSIMP-PARAMETER = 'CLUSIZ'. I_RSIMP-DBFIELD = 'TRDIR-NAME'. APPEND I_RSIMP. CALL FUNCTION 'FUNCTION_CREATE' EXPORTING * CORRNUM = ' ' FUNCNAME = 'Z_SUB_PROG' FUNCTION_POOL = 'ZCNV' * INTERFACE_GLOBAL = ' ' REMOTE_CALL = 'X' SHORT_TEXT = '_conversion_' * SUPPRESS_CORR_CHECK = 'X' * UPDATE_TASK = ' ' IMPORTING FUNCTION_INCLUDE = RS38L-INCLUDE TABLES EXCEPTION_LIST = I_RSEXC EXPORT_PARAMETER = I_RSEXP IMPORT_PARAMETER = I_RSIMP PARAMETER_DOCU = I_RSFSO TABLES_PARAMETER = I_RSTBL CHANGING_PARAMETER = I_RSCHA EXCEPTIONS DOUBLE_TASK = ERROR_MESSAGE = FUNCTION_ALREADY_EXISTS = INVALID_FUNCTION_POOL = INVALID_NAME = TOO_MANY_FUNCTIONS = OTHERS = . IF SY-SUBRC <> . IF SY-SUBRC <> . * write: / 'Irgendwas ist beim FUBA anlegen schiefgegangen', sy-subrc. MESSAGE e306(mq) WITH text-. ENDIF. EXIT. ENDIF. DATA: BEGIN OF PROG OCCURS , LINE(), END OF PROG. * break-point. READ REPORT RS38L-INCLUDE INTO PROG. LOOP AT PROG. IF PROG-LINE = ' '. PROG-LINE = 'submit (progname)'. INSERT PROG INTO PROG. PROG-LINE = 'with testrun = testrun '. INSERT PROG INTO PROG. PROG-LINE = 'with p_fkt = funktion'. INSERT PROG INTO PROG. PROG-LINE = 'with p_umsid = umsid '. INSERT PROG INTO PROG. PROG-LINE = 'with p_umsi2 = umsi2 '. INSERT PROG INTO PROG. PROG-LINE = 'with p_tskno = tskno '. INSERT PROG INTO PROG. PROG-LINE = 'with p_relid = relid '. INSERT PROG INTO PROG. PROG-LINE = 'with p_clusiz = clusiz '. INSERT PROG INTO PROG. PROG-LINE = 'to sap-spool '. INSERT PROG INTO PROG. PROG-LINE = 'without spool dynpro '. INSERT PROG INTO PROG. PROG-LINE = 'and return. '. INSERT PROG INTO PROG. EXIT. ENDIF. ENDLOOP. INSERT REPORT RS38L-INCLUDE FROM PROG. ENDFORM. *----------------------------------------------------------------------* FORM LISTE_DBSPACES_CREATE. DATA: BUFSIZE TYPE I. PERFORM GET_DB_PARAMETER(RSINF000) USING 'BUFFSIZE' BUFSIZE. BUFSIZE = BUFSIZE / . * exec sql performing makedbspaces. * c.dbsnum, * sum(c.chksize) * :bufsize , * into :dbspaces_chunks EXEC SQL PERFORMING APPEND_DBAFREE. SELECT D.NAME, SUM(C.NFREE) * :BUFSIZE FROM SYSMASTER:SYSDBSPACES D, SYSMASTER:SYSCHUNKS C WHERE C.DBSNUM = D.DBSNUM GROUP BY C.DBSNUM, D.NAME INTO :T_DBAFREE ENDEXEC. ENDFORM. *---------------------------------------------------------------------* FORM WRITE_PARMS. WRITE: / 'testrun:', TESTRUN, / 'funktion:', P_FKT(), / 'time:', SY-UZEIT, / '--------------------------------------------------'. ENDFORM.
ABAP-动态创建DATABASE/FUNCTION(风险)的更多相关文章
- bootstrap-multiselect 的简单使用,样式修改,动态创建option
1.bootstrap-multiselect 顾名思义基于bootstrap,bootstrap基于jquery,所以第一步,引入文件 bootstrap.css/ juery.js /bootst ...
- js动态创建和删除option
1.动态创建select function createSelect(){ var mySelect = document.createElement("select&q ...
- 动态创建selectjs 操作select和option
1.动态创建select function createSelect(){ var mySelect = document.createElement("select"); myS ...
- [SAP ABAP开发技术总结]反射,动态创建内表、结构、变量
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- ASP.NET实现二维码 ASP.Net上传文件 SQL基础语法 C# 动态创建数据库三(MySQL) Net Core 实现谷歌翻译ApI 免费版 C#发布和调试WebService ajax调用WebService实现数据库操作 C# 实体类转json数据过滤掉字段为null的字段
ASP.NET实现二维码 using System;using System.Collections.Generic;using System.Drawing;using System.Linq;us ...
- js动态创建style节点(js文件中添加css)
ie6 不能 document.createElement('style') 然后append到head标签里.所以就找到这样个好文章 --------------------- 有很多提供动态创建 ...
- Unity进阶技巧 - 动态创建UGUI
前言 项目中有功能需要在代码中动态创建UGUI对象,但是在网上搜索了很久都没有找到类似的教程,最后终于在官方文档中找到了方法,趁着记忆犹新,写下动态创建UGUI的方法,供需要的朋友参考 你将学到什么? ...
- jQuery 绑定事件到动态创建的元素上
在进入主题之前,我们先来看一个前台页面经常用到的功能:点击页面输入框时自动选择其中文本. 很容易想到利用输入框的focus事件,当输入框获得焦点时,再调用jQuery的select()方法. Okay ...
- javascript学习笔记(四):事件处理函数和动态创建html标记。
1 HTML的事件属性 全局事件属性:HTML 4 增加了使事件在浏览器中触发动作的能力,比如当用户点击元素时启动 JavaScript. a. Window 事件属性,针对 window 对象触发 ...
随机推荐
- 模板引擎之jade 学习
jade 模板引擎在node express 开发中有较多的使用,首先我们看一个简单的使用jade 生成的html 页面的标签代码: doctype html html(lang="en&q ...
- WebApi_基于Token的身份验证——JWT
JWT是啥? JWT就是一个字符串,经过加密处理与校验处理的字符串,形式为: A.B.C A由JWT头部信息header加密得到B由JWT用到的身份验证信息json数据加密得到C由A和B加密得到,是校 ...
- 在CentOS和RHEL中配置SNMPv3
首先,使用yum安装必要的软件 [root@server ~]# yum install net-snmp-utils net-snmp-devel安装完成之后, 先停止snmpd,再创建具有只读属性 ...
- S5PV210 移植无线wifi网卡 MT7601
一.准备工作 1.MT7601驱动下载 点击下载 2.插入usb WiFi 启动开发板linux,lsusb查看usb驱动 Bus 001 Device 003: ID 148f:7601看到的是该驱 ...
- 笔记本设置 2K 显示屏 Intel HD Graphics 3000
收了一台 32英寸的显示器,接到笔记 本只有 1920x1080,心想没得救了,要换笔记本才能用了. 在网上找了一圈,找到一篇说 Intel HD Graphics 3000 可以支持到 2560x1 ...
- 转jmeter --JDBC请求
做JDBC请求,首先要了解这个JDBC对象是什么,然后寻找响应的数据库连接URL和数据库驱动. 数据库URL:jdbc:sqlserver://200.99.197.190:1433;database ...
- C# DateTime 月第一天和最后一天 取法
取得某月和上个月第一天和最后一天的方法 /// <summary> /// 取得某月的第一天 /// </summary> /// <param name="d ...
- 常用Web框架
1.Aliceui Aliceui是支付宝的样式解决方案,是一套精选的基于 spm 生态圈的样式模块集合,是 Arale 的子集,也是一套模块化的样式命名和组织规范,是写 CSS 的更好方式. git ...
- spring boot学习(6) SpringBoot 之事务管理
两个操作要么同时成功,要么同时失败: 事务的一致性: 以前学ssh ssm都有事务管理service层通过applicationContext.xml配置,所有service方法都加上事务操作: 用来 ...
- 【转载】webstorm-前端javascript开发神器中文教程和技巧分享
webstorm是一款前端javascript开发编辑的神器,此文介绍webstorm的中文教程和技巧分享. webstorm8.0.3中文汉化版下载:百度网盘下载:http://pan.baidu. ...