DECLARE
      CURSOR tab_name_cur
      IS
          SELECT table_name
          FROM user_tables
          WHERE table_name LIKE 'GZD_GZDXX_%_2017';   
      tab_name_rec         tab_name_cur%ROWTYPE ;
      SQL_Str_Create       VARCHAR2(2500);
      SQL_Str_Comments     VARCHAR2(2500);
      SQL_Str_Pk           VARCHAR2(2500);
      Pk_column_name    user_cons_columns.column_name%TYPE;
      SQL_Str_default      VARCHAR2(2500);
    
BEGIN
      OPEN tab_name_cur;
      LOOP
       FETCH tab_name_cur INTO tab_name_rec;
       EXIT
            WHEN tab_name_cur%NOTFOUND;
               --dbms_output.put_line(tab_name_rec.table_name);
           --复制表
           SQL_Str_Create := ' CREATE TABLE ' || SUBSTR(tab_name_rec.table_name,1,LENGTH(tab_name_rec.table_name)-5)
                           || '_2018' || ' AS SELECT * FROM ' || tab_name_rec.table_name || ' WHERE 1=2' || ';' ;
           dbms_output.put_line(SQL_Str_Create);
           --execute IMMEDIATE SQL_Str_Create;
           --查询主键
        SELECT string_agg(cu.column_name) as  column_name INTO Pk_column_name
                    FROM user_cons_columns cu, user_constraints au
                    WHERE cu.constraint_name = au.constraint_name
                    AND au.constraint_type = 'P'
                    AND au.table_name = tab_name_rec.table_name
                    GROUP BY cu.constraint_name;
            
         --dbms_output.put_line('pk_column_name :' || tab_pk_rec.column_name || ' and constraint_name :' ||                 tab_pk_rec.constraint_name);
                   
         dbms_output.put_line('Pk_column_name--> '||Pk_column_name);   
                 
               
            --增加主键
            SQL_Str_Pk := 'alter table ' || tab_name_rec.table_name || ' add constraint '  
                                  ||' PK_'||tab_name_rec.table_name || ' primary key('
                                  ||  Pk_column_name
                                  ||') using index tablespace USERS pctfree 10 initrans 2 '
                                  || ' maxtrans 255  storage ('
                                  || 'initial 64K next 1M minextents 1 maxextents unlimited );';
             dbms_output.put_line(SQL_Str_Pk);     
           --查询备注
           FOR tab_commonts_rec IN
               (SELECT column_name,comments
               FROM user_col_comments c
               WHERE c.table_name = tab_name_rec.table_name)
               LOOP
                   --dbms_output.put_line('column_name :' || tab_commonts_rec.column_name || ' and                        comments :' ||tab_commonts_rec.comments);
                --增加备注
                   SQL_Str_Comments := 'comment on column ' || tab_name_rec.table_name
                                       || '.' || tab_commonts_rec.column_name               
                                       || ' IS '  || chr(39)||tab_commonts_rec.comments ||chr(39)||  ';' ;
                dbms_output.put_line(SQL_Str_Comments);
            END LOOP;
           
           --查询默认值
           FOR tab_commonts_default IN
               (SELECT t.column_name as column_name,t.data_type as data_type
            FROM USER_TAB_COLS t
            WHERE TABLE_NAME =tab_name_rec.table_name)
            LOOP
                   CASE tab_commonts_default.data_type
                       WHEN 'NUMBER' THEN
                           --dbms_output.put_line(tab_commonts_default.column_name || ' is NUMBER');
                           --增加默认值
                           SQL_Str_default := 'alter table '||tab_name_rec.table_name||' modify '
                                               || tab_commonts_default.column_name || ' default 0;';
                          dbms_output.put_line(SQL_Str_default);
                       WHEN 'VARCHAR2' THEN
                           --dbms_output.put_line(tab_commonts_default.column_name || ' is VARCHAR2');
                           SQL_Str_default := 'alter table '||tab_name_rec.table_name||' modify '
                                               || tab_commonts_default.column_name || ' default NULL;';
                          --dbms_output.put_line(SQL_Str_default);
                       ELSE
                         dbms_output.put_line(tab_commonts_default.column_name || ' is Unknown');
                   END CASE;
            END LOOP;            
      END LOOP;
      CLOSE  tab_name_cur;          
END;

亲测截图:

执行结果如下图:

大批量复制Oracle数据表,连带复制主键约束,字段说明以及字段默认值(量产)的更多相关文章

  1. 【数据库_Mysql】MySQL—修改表时给表添加联合主键约束

      添加语法如下: “ALTER TABLE table_name ADD CONSTRAINT pk_table_name PRIMARY KEY(列名1,列名2):” [示例1]假设订房信息表(O ...

  2. oracle建表 和 设置主键自增

    1.新建table CREATE TABLE ysb_log( id ) primary key not null , tbdate ) NULL, tb_time ) NOT NULL, tblog ...

  3. Oracle创建表(包含、主键自增)

    注意:Oracle导出建表语句不会导出触发器及自增索引 第一步:创建一张表 create table member( memberId number primary key, --主键.自增长 mem ...

  4. 更新oracle数据库表如何实现主键自增长

     在数据库中实现主键自动增长有利于我们做数据插入操作,在SQL SERVER上创建表时可以在int类型的字段后加上identity(1,1),该字段就会从1开始,按照+1的方式自增,将这个字段设置 ...

  5. 数据表设计之主键自增、UUID或联合主键

    最近在做数据库设计的时候(以MySQL为主),遇到不少困惑,因为之前做数据库表设计,基本上主键都是使用自增的形式,最近因为这种做法,被领导指出存在一些不足,于是我想搞明白哪里不足. 一.MySQL为什 ...

  6. Oracle 创建表并设置主键自增

    创建数据库 CREATE TABLE STUDENT(ID NUMBER PRIMARY KEY, NAME VARCHAR(200) NOT NULL, SEX VARCHAR(200), CREA ...

  7. oracle建表,设置主键,修改属性等

    --建表 create table book( book_id number(10), book_name varchar2(20), book_price number(10,2), book_au ...

  8. 【Oracle】【5】主键、外键管理

    前言: 1,事实上我是不使用外键的,所以本文只介绍主键 正文: (1)创建表的同时创建主键约束 create table STUDENT ( ID int , NAME varchar(8), AGE ...

  9. SQL约束(主键约束、外键约束、自动递增、不允许空值、值唯一、值默认、值限制范围)

    NOT NULL 不允许空值约束 NOT NULL 约束强制列不接受 NULL 值(NULL值就是没有值或缺值).NOT NULL 约束强制字段始终包含值,即不向字段添加值,就无法插入新记录或者更新记 ...

随机推荐

  1. 【luogu P1456 Monkey King】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1456 左偏树并查集不加路径压缩吧... #include <cstdio> #include & ...

  2. Android学习笔记_19_广播接收者 BroadcastReceiver及其应用_窃听短信_拦截外拨电话

    一.广播接收者类型: 广播被分为两种不同的类型:“普通广播(Normal broadcasts)”和“有序广播(Ordered broadcasts)”. 普通广播是完全异步的,可以在同一时刻(逻辑上 ...

  3. Android学习笔记_4_单元测试

    在实际开发中,开发android软件的过程需要不断地进行测试.而使用Junit测试框架,侧是正规Android开发的必用技术,在Junit中可以得到组件,可以模拟发送事件和检测程序处理的正确性. 1. ...

  4. 2018年暑假ACM个人训练题7 题解报告

    A:HDU 1060 Leftmost Digit(求N^N的第一位数字 log10的巧妙使用) B:(还需要研究一下.....) C:HDU 1071 The area(求三个点确定的抛物线的面积, ...

  5. 浅谈二分查找 JavaScript

    算法介绍 二分查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法.查找过程经历一下步骤: (1)从有序数组的中间的元素开始搜索,如果该元素正好是目标元素,则停止搜索并返回该元素的索引值,否则 ...

  6. TIDB4 —— 三篇文章了解 TiDB 技术内幕 - 谈调度

    原文地址:https://pingcap.com/blog-cn/tidb-internal-3/ 为什么要进行调度 先回忆一下第一篇文章提到的一些信息,TiKV 集群是 TiDB 数据库的分布式 K ...

  7. 菜鸟笔记 -- Chapter 6.2.2 标识符

    6.2.2  标识符 Java中使用标识符来作为类.方法.字段的名称,在Java基础中我们已经简单了解过标识符的定义方法和驼峰命名.本节我们来研究一下标识符的长度问题,难道类名.方法名都可以无限长吗? ...

  8. 在CentOS7系统上安装MySQL数据库

    1.下载安装MySQL官方repo文件 下载MySQL的官方repo文件 [root@centos7 ~]# wget -i -c http://dev.mysql.com/get/mysql57-c ...

  9. Swift_Set详解

    Swift_Set详解 点击查看源码 初始化 //初始化 fileprivate func testInit() { //空Set var set = Set<String>() prin ...

  10. excel导入到java/导出到excel

    package com.test.order.config; import com.test.order.domain.HavalDO; import org.apache.poi.ss.usermo ...