記錄一個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過來,暫時也就沒有多去思考了,等後面有需求了,再來記錄下。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章