posts - 60,comments - 71,trackbacks - 0

                  在ORACLE數(shù)據(jù)庫表中,有時(shí)會(huì)有需要更改數(shù)據(jù)庫表中字段類型的情況,比如由NUMBER(5)改為
          VARCHAR(50)...,這時(shí)就要視情況來更改了,如果原數(shù)據(jù)庫表中沒有數(shù)據(jù),則可以直接使用:
                          
                alter   table  test  modify  name  VARCHAR2(50);

                 但是有數(shù)據(jù)的話 就不能用上面方法了,

                   

                 alter table test add  name_temp number(5);
                        
                  
          update test set  name_temp=name;

                  
          alter table drop column name;

                   
          alter  table  test rename column  name_temp to name;

                  這種方法會(huì)使列名發(fā)生變化,而且字段順序增加 有可能發(fā)生行遷移,對應(yīng)用程序會(huì)產(chǎn)生影響

                  以下方法是比較好的方法

                  不用使列名發(fā)生變化 也不會(huì)發(fā)生表遷移,但這個(gè)有個(gè)缺點(diǎn)是表要更新兩次

                  如果數(shù)據(jù)量較大的話 產(chǎn)生的undo和redo更多 ,前提也是要停機(jī)做

                  要是不停機(jī)的話 ,也可以采用在線重定義方式來做

                  以下是腳本:

                 alter table test  add name_temp number(5);

                 
          update  test  set name_temp=name,name=null;

                 
          alter table  test  modify name  VARCHAR2(50);
                 
                     update  test  set name=name_temp,name_temp=null;
                 
                     commit;
                 
                     alter table  test  drop column name_temp;
              
                  
          desc test;
                   
                    這樣就不會(huì)出現(xiàn)上述的問題了.
          posted on 2009-03-04 11:42 henry1451 閱讀(852) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 班戈县| 双城市| 黑龙江省| 广德县| 洞头县| 彭山县| 汉沽区| 平舆县| 乌鲁木齐市| 景泰县| 龙岩市| 泰安市| 祁东县| 富源县| 镇平县| 上高县| 嫩江县| 博野县| 三河市| 呼图壁县| 梓潼县| 孝感市| 辽中县| 赫章县| 鸡西市| 伊宁市| 绩溪县| 镇康县| 无锡市| 浏阳市| 阳曲县| 高安市| 娄底市| 普洱| 宁化县| 黄龙县| 华池县| 安国市| 密云县| 秦皇岛市| 锡林郭勒盟|