大批量复制Oracle数据表,连带复制主键约束,字段说明以及字段默认值(量产)
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数据表,连带复制主键约束,字段说明以及字段默认值(量产)的更多相关文章
- 【数据库_Mysql】MySQL—修改表时给表添加联合主键约束
添加语法如下: “ALTER TABLE table_name ADD CONSTRAINT pk_table_name PRIMARY KEY(列名1,列名2):” [示例1]假设订房信息表(O ...
- oracle建表 和 设置主键自增
1.新建table CREATE TABLE ysb_log( id ) primary key not null , tbdate ) NULL, tb_time ) NOT NULL, tblog ...
- Oracle创建表(包含、主键自增)
注意:Oracle导出建表语句不会导出触发器及自增索引 第一步:创建一张表 create table member( memberId number primary key, --主键.自增长 mem ...
- 更新oracle数据库表如何实现主键自增长
在数据库中实现主键自动增长有利于我们做数据插入操作,在SQL SERVER上创建表时可以在int类型的字段后加上identity(1,1),该字段就会从1开始,按照+1的方式自增,将这个字段设置 ...
- 数据表设计之主键自增、UUID或联合主键
最近在做数据库设计的时候(以MySQL为主),遇到不少困惑,因为之前做数据库表设计,基本上主键都是使用自增的形式,最近因为这种做法,被领导指出存在一些不足,于是我想搞明白哪里不足. 一.MySQL为什 ...
- Oracle 创建表并设置主键自增
创建数据库 CREATE TABLE STUDENT(ID NUMBER PRIMARY KEY, NAME VARCHAR(200) NOT NULL, SEX VARCHAR(200), CREA ...
- oracle建表,设置主键,修改属性等
--建表 create table book( book_id number(10), book_name varchar2(20), book_price number(10,2), book_au ...
- 【Oracle】【5】主键、外键管理
前言: 1,事实上我是不使用外键的,所以本文只介绍主键 正文: (1)创建表的同时创建主键约束 create table STUDENT ( ID int , NAME varchar(8), AGE ...
- SQL约束(主键约束、外键约束、自动递增、不允许空值、值唯一、值默认、值限制范围)
NOT NULL 不允许空值约束 NOT NULL 约束强制列不接受 NULL 值(NULL值就是没有值或缺值).NOT NULL 约束强制字段始终包含值,即不向字段添加值,就无法插入新记录或者更新记 ...
随机推荐
- 今天升级win10.vs调试程序各种崩溃
今天升级win10.vs调试程序各种崩溃.感觉代码没问题.崩溃时有时没有.不知道是win10的问题,好真是我的代码问题. 问题1: 尝试读取或写入受保护的内存.这通常指示其他内存已损坏 不过.当我写这 ...
- PL/SQL知识点
1.ROW_NUMBER() OVER(PARTITION BY XXX ORDER BY XXX) SELECT STP.FLOW_INST_ID, BUU.USER_NAME, ORGG.NAME ...
- C# 通过socket实现UDP 通信
UDP不属于面向连接的通信,在选择使用协议的时候,选择UDP必须要谨慎.在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重.但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小, ...
- 11.多线程&&并发
11.1 操作系统中线程和进程的概念 一些常见的概念: 程序:指令和数据的byte序列,eg:qq.exe;a2. 进程:正在运行的程序(如QQ);a3.一个进程中可能有一到多个线程. 线程的概念:T ...
- RHEL6 建立DVD repo
1.准备镜像挂载目录 #mkdir /media/repo_dvd 2.制作镜像文件 #cp /dev/cdrom /opt/rhel_dvd.iso<BR> 或者 #dd if=/dev ...
- 获取APP地图权限
获取APP地图权限 NSLocationWhenUseUsageDescription,在info里面设置为空
- 02-第一个iOS程序
第一个iOS程序 第一个iOS程序简介 初学iOS开发,研究的程序不要过于复杂,应该从最基本的开始 大房子都是由小砖一块一块堆成的,而大型app是由无数个小程序段组成的 接下来实现一个简单的“加法计算 ...
- Angularjs基础(二)
AngularJS 表达式 AngularJS 表达式写在双大括号内:{{expression}} AngularJS 表达式把数据绑定到HTML,这与ng-bind 指令有异曲同工之妙 Angula ...
- 解析 Nginx 负载均衡策略
转载:https://www.cnblogs.com/wpjamer/articles/6443332.html 1 前言 随着网站负载的不断增加,负载均衡(load balance)已不是陌生话题. ...
- [USACO08NOV]时间管理Time Management(排序,贪心)
题目描述 作为一名忙碌的商人,约翰知道必须高效地安排他的时间.他有N工作要 做,比如给奶牛挤奶,清洗牛棚,修理栅栏之类的. 为了高效,列出了所有工作的清单.第i分工作需要T_i单位的时间来完成,而 且 ...