是否大學畢業後,生活中的一切纔是真正的開始?
作爲一名畢業已滿一年的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過來,暫時也就沒有多去思考了,等後面有需求了,再來記錄下。