当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 动态备份自建表数据到新表(自建表有数据的情况下要改字段长度或者其他)的更多相关文章

  1. QString内部仍采用UTF-16存储数据且不会改变(一共10种不同情况下的编码)

    出处:https://blog.qt.io/cn/2012/05/16/source-code-must-be-utf-8-and-qstring-wants-it/ 但是注意,这只是QT运行(Run ...

  2. 表单验证:$tablePrefix(定义表前缀);$trueTableName = 'yonghu',找到真实表名(yonghu)表;create($attr,0)两个参数;批量验证(返回数组);ajax+动态验证表单

    *$tablePrefix是定义在Model中的,优先级大于配置文件中,如果项目中表前缀全部比如为"a_",并且在配置文件中定义了 'DB_PREFIX'=>'a_' 后期如 ...

  3. 存在网路的情况下重命名SDE中数据图层错误(The orphan junction feature class cannot be renamed)

    运行环境为ArcGIS9.3,VS2008. 问题描述:数据通过SDE存储在Oracle10g数据库中,数据集中存在几何网络,在存在网络的情况下通过程序对其中的数据图层进行重命名,弹出"Th ...

  4. ABAP动态自建表维护程序Dynamin Process

    以前经常会遇到批量上传或修改数据到自建表的需求,所以在想是否可以做一个动态的程序,所有的自建表都可以用这个动态程序来维护. 于是就打算试着写动态的程序. 程序的要求:动态显示自建表ALV 动态下载Ex ...

  5. 转载: ABAP动态内表操作

    顾名思义,动态表的列是可以根据数据的变化而变化的,会使报表显示更简洁漂亮. 以下是实现方法. ------------------------------------------- 1, 创建动态内表 ...

  6. 入门大数据---Hive分区表和分桶表

    一.分区表 1.1 概念 Hive 中的表对应为 HDFS 上的指定目录,在查询数据时候,默认会对全表进行扫描,这样时间和性能的消耗都非常大. 分区为 HDFS 上表目录的子目录,数据按照分区存储在子 ...

  7. SQL Server 变更数据捕获(CDC)监控表数据

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现过程(Realization) 补充说明(Addon) 参考文献(References) ...

  8. MySQL表结构为InnoDB类型从ibd文件恢复数据

    客户的机器系统异常关机,重启后mysql数据库不能正常启动,重装系统后发现数据库文件损坏,悲催的是客户数据库没有进行及时备份,只能想办法从数据库文件当中恢复,查找资料,试验各种方法,确认下面步骤可行: ...

  9. 微软BI 之SSIS 系列 - 使用 Multicast Task 将数据同时写入多个目标表,以及写入Audit 与增量处理信息

    开篇介绍 在 SSIS Data Flow 中有一个 Multicast 组件,它的作用和 Merge, Merge Join 或者 Union All 等合并数据流组件对比起来作用正好相反.非常直观 ...

随机推荐

  1. python读取EXCEL是去掉空白行和表头全部重命名

    当读取进来的表格如图所示,转换成图2. import pandas as pd # header:指定作为列名的行,默认0,即取第一行的值为列名.数据为列名行以下的数据:若数据不含列名, # 则设定 ...

  2. C++快速读写

    1.主函数的最前面加入这个 std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); 2.这是一个读入数字的快读 inline int read() ...

  3. day27 面向对象

    day27 面向对象 目录 day27 面向对象 一.面相对象介绍 1 什么是对象 2 类于对象 二.实现面向对象编程 1 先定义类 2 属性访问 2.1 调用dict方法 2.2 类.属性 3 调用 ...

  4. python 迭代器(三):迭代器基础(三)典型的迭代器

    标准迭代器 示例 14-4 sentence_iter.py:使用迭代器模式实现 Sentence 类 import re import reprlib RE_WORD = re.compile('\ ...

  5. 通过server酱实现定时推送天气情况,再不用担心你的糊涂蛋女友忘带伞了~~

    昨天菜鸟小白给大家留了一个课后作业,如何实现天气的定时推送.有没有小伙伴做出来答案呢?今天菜鸟小白给大家分享我的实现方式吧.这个是我今天整的程序流程图,昨天我们还只是实现了中间的通过和风天气API获取 ...

  6. DQL:查询表中的记录

    DQL:查询表中的记录 * select * from 表名; 1. 语法: select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组之后的条件 ...

  7. Ethical Hacking - Web Penetration Testing(9)

    SQL INJECTION Discovering SQLi in GET Inject by browser URL. Selecting Data From Database Change the ...

  8. P1469 找筷子

    摘要:有n根(n为奇数)长短不一的筷子,里面可以凑成(n-1)/2双筷子,只剩下一根不能凑对,问那根不能凑对的筷子有多长. 乍听起来好像不难,桶是一个好东西,可是一看数据:对于100%的数据,N< ...

  9. ES6标准中的import和export

    在ES6前, 前端使用RequireJS或者seaJS实现模块化, requireJS是基于AMD规范的模块化库,  而像seaJS是基于CMD规范的模块化库,  两者都是为了为了推广前端模块化的工具 ...

  10. 大型Java进阶专题(八)设计模式之适配器模式、装饰者模式和观察者模式

    前言 ​ 今天开始我们专题的第八课了.本章节将介绍:三个设计模式,适配器模式.装饰者模式和观察者模式.通过学习适配器模式,可以优雅的解决代码功能的兼容问题.另外有重构需求的人群一定需要掌握装饰者模式. ...