在一些重大变更前,后都需要备份涉及的重要表,当表很多且备份不是最新的时候,需要drop表,因为oracle没if exists 这种语法,写个存储过程来批量备份,当然也可以把加上参数,不过没什么必要,基本知道哪些表需要备份,执行下存储过程就OK

注意,这边如果当天存在同名备份表,会drop掉,

create or replace procedure BAK_CRM_PRO as
type type_array is varray(20) of varchar2(50);
back_tables type_array :=type_array(
'TBL_XXX1',
'TBL_XXX2',
'TBL_XXX3',
'TBL_XXX4',
'TBL_XXX5',
'TBL_XXX6',
'TBL_XXX7',
'TBL_XXX8',
'TBL_XXX9',
'TBL_XXX10'
);
bak_name varchar2(100);
temp_str varchar2(1000);
date_str varchar2(10);
temp_num number;
temp_num2 number;
beginselect to_char(sysdate,'mmdd') into date_str from dual;for i in 1..back_tables.count loopbak_name:='BAK_'||date_str||'_'||back_tables(i);if (length(bak_name)>30) thenbak_name:=regexp_replace(bak_name,'_([[:alpha:]])[[:alpha:]]+','_\1',8);end if;execute immediate 'select count(1)  from user_tables a where a.table_name=:1' into temp_num using bak_name ;dbms_output.put_line('temp_num='||temp_num);if(temp_num=1) thentemp_str:='drop table '||bak_name;dbms_output.put_line(temp_str);execute immediate temp_str;end if;temp_str:='create table '||bak_name||' as select * from '||back_tables(i);dbms_output.put_line(temp_str);execute immediate temp_str;temp_num:=1;temp_num2 :=2;execute immediate 'select count(1) from '||back_tables(i) into temp_num;execute immediate 'select count(1) from '||bak_name into temp_num2;dbms_output.put_line('n1='||temp_num||' n2='||temp_num2);if(temp_num=temp_num2)thendbms_output.put_line('back '||bak_name||' success');end if;end loop;
end;

先编译下存储,然后调用就可以

另外plsql中编译存储过程在命令窗口,复制上面的代码,然后输入/ 和回车,就能编译,当然编译前需要替换成自己需要备份的表,就是tbl_xxx那部分

这边用到了dml动态sql,也可以用游标代替,不太熟悉这个

编译后执行 在sql窗口执行下面这个就可以

beginBAK_CRM_PRO_test();
end;

如果不需要这个存储过程可以删除

drop procedure BAK_CRM_PRO_test;

oracle批量备份表的存储过程相关推荐

  1. mysql 备份大表 存储过程_mysql批量备份表的存储过程写法

    1.在工作会遇到这种情况,mysql数据库,系统涉及到备份多表数据,为了方便,用存储过程来实现此功能,同时也复习一下存储过程的写法,同时记录下方便以后扩展修改 2.存储过程代码如下 -- 创建存储过程 ...

  2. oracle 快速备份表数据

    oracle 快速备份表数据 CreateTime--2018年2月28日17:04:50 Author:Marydon UpdateTime--2017年1月20日11:45:07 1.1.9.3 ...

  3. SQLSERVER和ORACLE批量处理表名和字段名大写

    在sql移植到oracle过程中,都会遇到表名和字段名大写的问题,因为在oracle中默认表名和字段名都是大写的,虽然可以通过使用双引号的方式进行操作,如select * from "tes ...

  4. Oracle快速备份表数据

    Oracle数据库中备份表数据. 例子: 1 create table table_name_bak as select * from table_name 1 create table table_ ...

  5. 星环TDH数据库批量生成表和存储过程

    环境准备 安装python环境:解压 ,然后设置环境变量.把ETL文件夹放到本地 ETL文件夹以及脚本说明 路径D:\ETL\genproc下是各种运行的Python脚本. 路径D:\ETL\mode ...

  6. oracle快速备份表

    生产上线如何快速备份表. create  表名_bak _日期 as select * from表

  7. oracle批量删除表空间,批量删除oracle用户表空间

    批量删除oracle用户表空间 1.[代码][Shell/批处理]代码 #!/bin/bash # get cuttent path selfpath=$(cd "$(dirname &qu ...

  8. Oracle批量清空表数据

    清空表数据有两种方式,delete from tableName; truncate table tableName; 第二种方式更加高效,直接删除,不能回滚. 如果要批量执行删除脚本,表很多的时候, ...

  9. oracle中备份表的创建,ORACLE DB创建步骤-运用冷备份和RMAN

    u  RMAN创建数据库 1.环境的准备 ²  在新建立数据库的机器上申请在DBA组的ORACLE OWNER 用户名必须与原数据库的ORACLE OWNER 相同. ²  安装ORACLE 软件,安 ...

最新文章

  1. Jad一个好东西(转载)
  2. python animation 轨迹_Python实例:自动轨迹绘制
  3. 英文环境下中文输入法的设置
  4. python 钉钉机器人发送图片_Python结合钉钉实时自动监控股票行情,上班炒股再也不怕老板发现...
  5. Linux C目标文件
  6. android studio 修改文件后出现类型转换错误
  7. 做过CC1020的苦逼前人告诉你(分拿来)
  8. .NET利用ActionFilter特性记录日志或者运行性能计数器。(log trace or perform perfcounter by actionFilter attribute)...
  9. docker,deamon.json文件说明
  10. Flink DataStream的wordCount、数据源和Sink、Side Outputs、两阶段提交(two-phase commit, 2PC)
  11. MCU、MPU、DSP、FPGA是什么意思
  12. 数据结构 —— 图解AVL树(平衡二叉树)
  13. 一张图片中的分离数据+十进制删改十六进制+连续base32和64编码+okk编码题目--rsa中求d题目
  14. 主机识别SDIO接口卡过程
  15. 莫队入门例题之持久化莫队:2120: 数颜色
  16. 极路由修改为openwrt源并安装transmission挂pt
  17. python大作业有哪些项目 选题做个啥【推荐】
  18. 用RGBD投影激光雷达数据:depthimage_to_laserscan
  19. 游戏设计-《游戏改变世界》-思维导图
  20. 推荐几个网址 -by jhy

热门文章

  1. [ 数据结构 ] 平衡二叉树(AVL)--------左旋、右旋、双旋
  2. 5种顶级逻辑思维训练法:1min 轻松上手,工作学习都能用
  3. linux命令行看图工具,六个鲜为人知的超酷Unix/Linux命令
  4. 【黑马程序员pink老师前端】网页相关概念
  5. Linux系统重启和停止Mysql服务教程
  6. 数据库:数据的独立性
  7. 关于近期工作中遇到的各种问题总结
  8. Python3-StringIO和BytesIO的总结
  9. RSYNC 自动同步文件免密
  10. 古琴怎么学,古琴入门,初学者应该这么练(二)