ABAP 动态备份自建表数据到新表(自建表有数据的情况下要改字段长度或者其他)
当abaper开发好一个程序给用户使用一段时间后,发现某个字段的长度需要修改,但数据库表中已经存在很多数据,冒然直接改表字段可能会导致数据丢失,这种问题的后果可能非常严重。
所以我想到先复制出一个新表,在新表里改好字段长度,然后把旧表的数据插入到新表,这一步就是备份数据,再修改旧表的字段长度,如果旧表数据丢失,可以立马把新表的数据复制回旧表,这样就可以解决一些不能预见的的问题。
步骤:
1.第一步就是复制一个新表出来,改好字段。
2.创建一个程序,以下程序需要输入两个表名,一个旧表一个新表,不多说,上代码。
*&---------------------------------------------------------------------*
*& Report ZP_COPY_DATA
*&---------------------------------------------------------------------*
*& 程序功能:动态备份表数据至新表
*&---------------------------------------------------------------------*
REPORT zp_copy_data. FIELD-SYMBOLS: <fs_old> TYPE table,
<fs_new> TYPE table. DATA: dyn_table_old TYPE REF TO data,
dyn_table_new TYPE REF TO data. DATA: structure_name TYPE dd02l-tabname,
ls_fieldcat TYPE lvc_s_fcat,
gt_fieldcat TYPE lvc_t_fcat. *&---------------------------------------------------------------------*
*& Selection Screen.
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS: old_tab TYPE char16 OBLIGATORY.
SELECTION-SCREEN SKIP 1.
PARAMETERS: new_tab TYPE char16 OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1. *&---------------------------------------------------------------------*
*& START-OF-SELECTION.
*&---------------------------------------------------------------------*
START-OF-SELECTION.
IF old_tab+0(1) <> 'Z' OR new_tab+0(1) <> 'Z'.
MESSAGE '请输入自建表名' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ENDIF. *****动态创建旧内表********
structure_name = old_tab. CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = structure_name
CHANGING
ct_fieldcat = gt_fieldcat. CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = gt_fieldcat
IMPORTING
ep_table = dyn_table_old. ASSIGN dyn_table_old->* TO <fs_old>. *****动态创建新内表******
structure_name = new_tab. REFRESH gt_fieldcat. CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = structure_name
CHANGING
ct_fieldcat = gt_fieldcat. CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = gt_fieldcat
IMPORTING
ep_table = dyn_table_new. ASSIGN dyn_table_new->* TO <fs_new>. *****把旧表数据拷贝到内表
SELECT * FROM (old_tab) INTO CORRESPONDING FIELDS OF TABLE <fs_old>. *****内表数据插入到新表
IF lines( <fs_old> ) > 0.
MOVE-CORRESPONDING <fs_old> TO <fs_new>.
CHECK lines( <fs_new> ) > 0.
INSERT (new_tab) FROM TABLE <fs_new>.
IF sy-subrc = 0.
COMMIT WORK.
MESSAGE '备份成功' TYPE 'S'.
ELSE.
ROLLBACK WORK.
MESSAGE '备份失败' TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.
ENDIF.
3.界面的效果做的比较简单,点击按钮后旧表数据自动备份到新表。

5.其实解决的方法有很多,新建一个表只是比较安全,如果各位有更好的方法可以一起交流。
作者:明光烁亮
出处:http://www.cnblogs.com/hezhongxun/
微信号:HEme922 欢迎加好友一起交流SAP! 视频资料共享。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
ABAP 动态备份自建表数据到新表(自建表有数据的情况下要改字段长度或者其他)的更多相关文章
- QString内部仍采用UTF-16存储数据且不会改变(一共10种不同情况下的编码)
出处:https://blog.qt.io/cn/2012/05/16/source-code-must-be-utf-8-and-qstring-wants-it/ 但是注意,这只是QT运行(Run ...
- 表单验证:$tablePrefix(定义表前缀);$trueTableName = 'yonghu',找到真实表名(yonghu)表;create($attr,0)两个参数;批量验证(返回数组);ajax+动态验证表单
*$tablePrefix是定义在Model中的,优先级大于配置文件中,如果项目中表前缀全部比如为"a_",并且在配置文件中定义了 'DB_PREFIX'=>'a_' 后期如 ...
- 存在网路的情况下重命名SDE中数据图层错误(The orphan junction feature class cannot be renamed)
运行环境为ArcGIS9.3,VS2008. 问题描述:数据通过SDE存储在Oracle10g数据库中,数据集中存在几何网络,在存在网络的情况下通过程序对其中的数据图层进行重命名,弹出"Th ...
- ABAP动态自建表维护程序Dynamin Process
以前经常会遇到批量上传或修改数据到自建表的需求,所以在想是否可以做一个动态的程序,所有的自建表都可以用这个动态程序来维护. 于是就打算试着写动态的程序. 程序的要求:动态显示自建表ALV 动态下载Ex ...
- 转载: ABAP动态内表操作
顾名思义,动态表的列是可以根据数据的变化而变化的,会使报表显示更简洁漂亮. 以下是实现方法. ------------------------------------------- 1, 创建动态内表 ...
- 入门大数据---Hive分区表和分桶表
一.分区表 1.1 概念 Hive 中的表对应为 HDFS 上的指定目录,在查询数据时候,默认会对全表进行扫描,这样时间和性能的消耗都非常大. 分区为 HDFS 上表目录的子目录,数据按照分区存储在子 ...
- SQL Server 变更数据捕获(CDC)监控表数据
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现过程(Realization) 补充说明(Addon) 参考文献(References) ...
- MySQL表结构为InnoDB类型从ibd文件恢复数据
客户的机器系统异常关机,重启后mysql数据库不能正常启动,重装系统后发现数据库文件损坏,悲催的是客户数据库没有进行及时备份,只能想办法从数据库文件当中恢复,查找资料,试验各种方法,确认下面步骤可行: ...
- 微软BI 之SSIS 系列 - 使用 Multicast Task 将数据同时写入多个目标表,以及写入Audit 与增量处理信息
开篇介绍 在 SSIS Data Flow 中有一个 Multicast 组件,它的作用和 Merge, Merge Join 或者 Union All 等合并数据流组件对比起来作用正好相反.非常直观 ...
随机推荐
- BUUCTF-Misc-No.3
比赛信息 比赛地址:Buuctf靶场 内心os(蛮重要的) 我只想出手把手教程,希望大家能学会然后自己也成为ctf大佬,再来带带我QWQ 文件中的秘密 | SOLVED | 打开文件,winhex照妖 ...
- JavaScript图形实例:随机SierPinski三角形
在“JavaScript图形实例:SierPinski三角形”中,我们介绍了SierPinski三角形的基本绘制方法,在“JavaScript图形实例:迭代函数系统生成图形”一文中,介绍了采用IFS方 ...
- Spring Boot读取配置文件的几种方式
Spring Boot获取文件总的来说有三种方式,分别是@Value注解,@ConfigurationProperties注解和Environment接口.这三种注解可以配合着@PropertySou ...
- day79 组件化开发
目录 一.组件[component] 默认组件 二. Vue自动化工具(Vue-cli) 1 安装node.js 2 npm 3 安装Vue-cli 4 使用Vue-CLI初始化创建前端项目 4.1 ...
- 一文搞懂Python函数(匿名函数、嵌套函数、闭包、装饰器)!
Python函数定义.匿名函数.嵌套函数.闭包.装饰器 目录 Python函数定义.匿名函数.嵌套函数.闭包.装饰器 函数核心理解 1. 函数定义 2. 嵌套函数 2.1 作用 2.2 函数变量作用域 ...
- Python split分割字符串
s = input(); str = s.split("-") print("{}+{}".format(str[0],str[-1]))
- element-ui 表单校验 Rules 配置 常用黑科技
type 指示type要使用的验证器.可识别的类型值为: string:类型必须为string.type 默认是 string // 校验 string: [ {type: 'string', mes ...
- drf源码剖析系列(系列目录)
drf源码剖析系列(系列目录) 01 drf源码剖析之restful规范 02 drf源码剖析之快速了解drf 03 drf源码剖析之视图 04 drf源码剖析之版本 05 drf源码剖析之认证 06 ...
- 基于three.js的全景
直接上代码: <!DOCTYPE html><html> <head> <title>three.js css3d - panorama</tit ...
- 网络编程-HTTPS
明文: 对称加密: 非对称:(公钥:pk 私钥:sk) 对称+非对称: 先用非对称方式发送num1给server,server用私钥得出key(由num1算出来),自此,约定C.S以此key(num1 ...