是否大学毕业后,生活中的一切才是真正的开始?
作为一名毕业已满一年的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过来,暂时也就没有多去思考了,等后面有需求了,再来记录下。
2533

被折叠的 条评论
为什么被折叠?



