posts - 60,comments - 71,trackbacks - 0

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

                 但是有數據的話 就不能用上面方法了,

                   

                 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;

                  這種方法會使列名發生變化,而且字段順序增加 有可能發生行遷移,對應用程序會產生影響

                  以下方法是比較好的方法

                  不用使列名發生變化 也不會發生表遷移,但這個有個缺點是表要更新兩次

                  如果數據量較大的話 產生的undo和redo更多 ,前提也是要停機做

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

                  以下是腳本:

                 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;
                   
                    這樣就不會出現上述的問題了.
          posted on 2009-03-04 11:42 henry1451 閱讀(848) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 会理县| 桓仁| 阜阳市| 昭觉县| 普安县| 太和县| 普格县| 吴忠市| 河池市| 利辛县| 青海省| 阿拉尔市| 澄迈县| 菏泽市| 体育| 周宁县| 曲靖市| 林口县| 马尔康县| 岢岚县| 即墨市| 楚雄市| 车致| 五台县| 锡林浩特市| 长垣县| 万源市| 麟游县| 大城县| 涿鹿县| 天气| 积石山| 三都| 阿合奇县| 张掖市| 东莞市| 南城县| 中卫市| 烟台市| 阿尔山市| 白银市|