Build Insert Statements for the Existing Data in Tables

下面这个脚本实现了取得一个非空表中的所有insert语句

This script builds insert statements for the existing data in the tables. One can run the generated script to repopulate the data.

  1. -- By: Ashish Kumar
  2. -- Date Created: 10/01/2001
  3. -- EMail: kumara@jagat.com
  4. -- Code Version: 1.0.1
  5.  
  6. -- Objective:
  7. -- You can use the following code to extract the existing data from tables in the form
  8. -- of insert statements. The generated script can be run at a later time to re-create your data.
  9. -- This code is no match for EXPORT and IMPORT utilities.
  10. -- Use it for *quick and dirty* situations.
  11. -- The code handles only date, char, varchar2, and numeric data types.
  12.  
  13. -- Change History:
  14.  
  15. -- The example used in the code uses scott schema.
  16.  
  17. -- AUTHOR MAKES NO WARRANTIES FOR THIS CODE.
  18.  
  19. -- Step 1: 创建下面的函数
  1. create or replace Function ExtractData(v_table_name varchar2) return varchar2 As
  2. b_found boolean:=false;
  3. v_tempa varchar2(8000);
  4. v_tempb varchar2(8000);
  5. v_tempc varchar2(255);
  6. begin
  7. for tab_rec in (select table_name from user_tables where table_name=upper(v_table_name))
  8. loop
  9. b_found:=true;
  10. v_tempa:='select ''insert into '||tab_rec.table_name||' (';
  11. for col_rec in (select * from user_tab_columns
  12. where
  13. table_name=tab_rec.table_name
  14. order by
  15. column_id)
  16. loop
  17. if col_rec.column_id=1 then
  18. v_tempa:=v_tempa||'''||chr(10)||''';
  19. else
  20. v_tempa:=v_tempa||',''||chr(10)||''';
  21. v_tempb:=v_tempb||',''||chr(10)||''';
  22. end if;
  23. v_tempa:=v_tempa||col_rec.column_name;
  24. if instr(col_rec.data_type,'CHAR') > 0 then
  25. v_tempc:='''''''''||'||col_rec.column_name||'||''''''''';
  26. elsif instr(col_rec.data_type,'DATE') > 0 then
  27. v_tempc:='''to_date(''''''||to_char('||col_rec.column_name||',''mm/dd/yyyy hh24:mi'')||'''''',''''mm/dd/yyyy hh24:mi'''')''';
  28. else
  29. v_tempc:=col_rec.column_name;
  30. end if;
  31. v_tempb:=v_tempb||'''||decode('||col_rec.column_name||',Null,''Null'','||v_tempc||')||''';
  32. end loop;
  33. v_tempa:=v_tempa||') values ('||v_tempb||');'' from '||tab_rec.table_name||';';
  34. end loop;
  35. if Not b_found then
  36. v_tempa:='-- Table '||v_table_name||' not found';
  37. else
  38. v_tempa:=v_tempa||chr(10)||'select ''-- commit;'' from dual;';
  39. end if;
  40. return v_tempa;
  41. end;
  42. /
  1. show errors
  2.  
  3. -- STEP 2: Run the following code to extract the data. 新建一个文本,文本中包括下面的内容
  1. set head off
  2. set pages 0
  3. set trims on
  4. set lines 2000
  5. set feed off
  6. set echo off
  7. var retline varchar2(4000)
  8. spool /home/oracle/hxy/t1.sql
  9. select 'set echo off' from dual;
  10. select 'spool /home/oracle/hxy/recreatedata.sql' from dual;
  11. select 'select ''-- This data was extracted on ''||to_char(sysdate,''mm/dd/yyyy hh24:mi'') from dual;' from dual;
  12.  
  13. -- Repeat the following two lines as many times as tables you want to extract
  14. exec :retline:=ExtractData('dept');
  15. print :retline;
  16.  
  17. exec :retline:=ExtractData('emp');
  18. print :retline;
  19.  
  20. select 'spool off' from dual;
  21. spool off
  22. @/home/oracle/hxy/t1
  1. -- STEP3: Run the spooled output c:\recreatedata.sql to recreate data. 查看recreatedata.sql
  1.  
  1. 例如:
  1. db111@dbrac1 /home/oracle/hxy$ cat recreatedata.sql
  1. -- This data was extracted on 03/11/2014 21:42
  2. insert into DEPT (
  3. DEPTNO,
  4. DNAME,
  5. LOC) values (10,
  6. 'ACCOUNTING',
  7. 'NEW YORK');
  8.  
  9. insert into DEPT (
  10. DEPTNO,
  11. DNAME,
  12. LOC) values (20,
  13. 'RESEARCH',
  14. 'DALLAS');
  15.  
  16. insert into DEPT (
  17. DEPTNO,
  18. DNAME,
  19. LOC) values (30,
  20. 'SALES',
  21. 'CHICAGO');
  22.  
  23. insert into DEPT (
  24. DEPTNO,
  25. DNAME,
  26. LOC) values (40,
  27. 'OPERATIONS',
  28. 'BOSTON');
  29.  
  30. -- commit;
  31. insert into EMP (
  32. EMPNO,
  33. ENAME,
  34. JOB,
  35. MGR,
  36. HIREDATE,
  37. SAL,
  38. COMM,
  39. DEPTNO) values (7369,
  40. 'SMITH',
  41. 'CLERK',
  42. 7902,
  43. to_date('12/17/1980 00:00','mm/dd/yyyy hh24:mi'),
  44. 800,
  45. Null,
  46. 20);
  47.  
  48. insert into EMP (
  49. EMPNO,
  50. ENAME,
  51. JOB,
  52. MGR,
  53. HIREDATE,
  54. SAL,
  55. COMM,
  56. DEPTNO) values (7499,
  57. 'ALLEN',
  58. 'SALESMAN',
  59. 7698,
  60. to_date('02/20/1981 00:00','mm/dd/yyyy hh24:mi'),
  61. 1600,
  62. 300,
  63. 30);
  64.  
  65. insert into EMP (
  66. EMPNO,
  67. ENAME,
  68. JOB,
  69. MGR,
  70. HIREDATE,
  71. SAL,
  72. COMM,
  73. DEPTNO) values (7521,
  74. 'WARD',
  75. 'SALESMAN',
  76. 7698,
  77. to_date('02/22/1981 00:00','mm/dd/yyyy hh24:mi'),
  78. 1250,
  79. 500,
  80. 30);
  81.  
  82. insert into EMP (
  83. EMPNO,
  84. ENAME,
  85. JOB,
  86. MGR,
  87. HIREDATE,
  88. SAL,
  89. COMM,
  90. DEPTNO) values (7566,
  91. 'JONES',
  92. 'MANAGER',
  93. 7839,
  94. to_date('04/02/1981 00:00','mm/dd/yyyy hh24:mi'),
  95. 2975,
  96. Null,
  97. 20);

取得表中数据的insert语句的更多相关文章

  1. 将表中数据生成SQL语句

    在开发过程中,经常需要我们对表中的数据进行转移,如果在同台机器,可以使用SQL自带的导入数据,但是如果想让所有的数据生成可执行的SQL语句,它的移植性最强了.首先要设计一个存储过程.具体如下: CRE ...

  2. 表数据转换为insert语句

    /* 对象:导出物理表数据为Insert语句 描述:可以传递条件精确导出sql 加条件的前提是只知道相应的字段名及类型 */ from sysobjects where name ='proc_ins ...

  3. sqlserver 表中记录生成insert,可以加条件,可以生成建表语句

    sqlserver 表中记录生成insert,可以加条件,可以生成建表语句 create PROCEDURE [sp_getinsert] ( ) , --如果非默认架构,可以加上架构名 例如:sch ...

  4. mysql--对行(表中数据)的增删改查

    一.插入数据(增加)insert 1.插入数据(顺序插入) 语法一: INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n); #指定字段来插入数据,插 ...

  5. SQLite中特殊的INSERT语句

    SQLite中特殊的INSERT语句   在SQLite中,INSERT是基本语句,用来向表中插入数据.但是当表中存在字段存在唯一.非空.检查.主键等约束时,插入的数据很容易和约束冲突,造成插入操作失 ...

  6. mysql 表中数据不存在则插入,否则更新数据

    在很多时候我们会操作数据库表,但是在向表中插入数据时,会遇到表中已经存在该id的数据或者没有该id的数据的情况,没有该id的数据的情况时直接插入就OK,遇到已经存在该id的数据的情况则更新该id的数据 ...

  7. [SQL]开启事物,当两条插入语句有出现错误的时候,没有错误的就插入到表中,错误的语句不影响到正确的插入语句

    begin transaction mustt insert into student values(,'kkk','j大洒扫','j','djhdjh') insert into student v ...

  8. MySQL查询数据表中数据记录(包括多表查询)

    MySQL查询数据表中数据记录(包括多表查询) 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: sele ...

  9. sql server 数据库导出表里所有数据成insert 语句

    有时候,我们想把数据库的某张表里的所有数据导入到另外一个数据库或另外一台计算机上的数据库,对于sql server有这样的一种方法 下面我以sql server 2008 R2,数据库是Northwi ...

随机推荐

  1. BZOJ 4665: 小w的喜糖

    Sol DP+容斥. 这就是一个错排的扩展...可是想到容斥却仅限于种数的容斥,如果种数在一定范围内我就会做了QAQ. 但是容斥的是一定在原来位置的个数. 发现他与原来的位置无关,可以先把每个同种的糖 ...

  2. SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data

    在用php返回json数据的时候如果出现这种错误,先检查一下php中是否有使用var_dump()函数 这个函数会在页面输出测试变量的结构,浏览器会将这个当做json数据,所以就报错了....

  3. C++拷贝构造函数(深拷贝,浅拷贝)

    对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量.下面看一个类对象拷贝的简单例子. #i ...

  4. 基于“事件”驱动的领域驱动设计(DDD)框架分析

    摘抄自 从去年10月份开始,学了几个月的领域驱动设计(Domain Driven Design,简称DDD).主要是学习领域驱动设计之父Eric Evans的名著:<Domain-driven ...

  5. ios 汉字字符串数组拼音排序

    ios没有提供简单的汉字拼音排序方法,在网上看到了oc方法,这里写以下对应的swift方法 var stringCompareBlock: (String,String)->Bool = { ( ...

  6. 2014北大研究生推免机试(校内)-复杂的整数划分(DP进阶)

    这是一道典型的整数划分题目,适合正在研究动态规划的同学练练手,但是和上一个随笔一样,我是在Coursera中评测通过的,没有找到适合的OJ有这一道题(找到的ACMer拜托告诉一声~),这道题考察得较全 ...

  7. 6.SpringMVC注解启用

    SpringMVC注解可以帮助我们快速地注入 属性和参数 提高开发效率. 由于 有相当一部分人讨厌xml配置方式 注解可以覆盖 xml则不能 使用注解比xml规范化,因为很多注解都是java的规范的范 ...

  8. Gym 100703K Word order 贪心

    题目链接 题意:给定一个长度为n的字符串,字符串仅由"F","N","A"三种字符组成,现有一种操作P,即把两个相邻的字符调换位置.要求把所 ...

  9. java内存分配原理

    一般Java在内存分配时会涉及到以下区域: ◆寄存器:我们在程序中无法控制 ◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 ◆堆:存放用new产生的数据 ◆静态域:存放在 ...

  10. linux日常易忘指令

    1.编辑全局指令 进入~/.bash_profile 增加"exprot +(启动文件的地址)" source ~/.bash_profilr(刷新) 2.修改mysql密码 my ...