记录一个oracle表结构迁移方法

是否大学毕业后,生活中的一切才是真正的开始?

作为一名毕业已满一年的IT狗,这个问题常常入我脑海中来,但始终没有确切的答案。这些天常能看见穿着学士服的师弟师妹们发的动态,偶念一想去年今日此门中那些发着动态的是我们。

------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------

手上的某个项目中有这么一个需求,需要通过代码动态将一个库下的某些表COPY到另一个库下,数据库是用的ORACLE。当时由于时间紧迫,开发好后没有进行记录,而最近这几天比较闲,想想感觉这个操作还是挺有记录价值的,这里就简单记录下吧。为了公司项目的保密性,就不记录代码了,只将主要的SQL记录一下(其实就是对oracle中几个系统表的查询)

当时开发时先是在百度上搜了搜,没有找到相关的解决办法,然后又GOOGLE了下,发现github上有一个项目貌似能解决这个问题,借鉴的项目地址如下:https://github.com/pgm/oracle-schema-copy,其中的主要代码文件为:https://github.com/pgm/oracle-schema-copy/blob/master/src/main/java/com/github/CopyUtils.java。在仔细观察代码后,发现其实也并不能实现我当时的功能需求,因为两个库的表空间等信息可能不一样,于是我便在此项目的基础进行了一些修改完成了手上的表COPY的功能开发。

主要参考SQL:

1.创建表

create table as select * from

2.获取索引

select INDEX_NAME,TABLE_NAME,listagg(COLUMN_NAME,',') within group(order by COLUMN_POSITION) COLUMN_NAME,INDEX_TYPE,UNIQUENESS
  from (select A.INDEX_NAME,
               A.TABLE_NAME,
               A.COLUMN_NAME,
               A.COLUMN_POSITION,
               B.INDEX_TYPE,
               B.UNIQUENESS
          from all_ind_columns A
          join all_indexes B on (A.Index_Name = B.Index_Name and
                                A.TABLE_OWNER = B.Table_Owner)
         where A.table_name = 'tableName'
           and A.table_owner = 'tableOwner')
 group by INDEX_NAME,TABLE_NAME,INDEX_TYPE,UNIQUENESS

3.获取主键

select cu.*
  from all_cons_columns cu, all_constraints au
 where cu.constraint_name = au.constraint_name
   and au.constraint_type = 'P'
   and au.table_name = 'tableName'
   and au.owner = 'tableOwner'

通过上面的3个SQL再通过代码的编写可以很容易完成了表与索引和主键的创建。不过还存在一个缺陷:对于字段的默认值没有COPY过来,由于当时那个项目中没有需要将默认值COPY过来,暂时也就没有多去思考了,等后面有需求了,再来记录下。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水中加点糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值