轉貼楊大師yangtingkun_如何為table快速新增一個預設值的新列

wisdomone1發表於2012-03-30
附上楊大師的文章連結快速增加表新加列的預設值的方法

下為自己測試示例:
2012年3月30日 星期五 11時53分



SQL> conn scott/system
已連線。
SQL> create table t_add_newcol(a int,b int);

表已建立。

SQL> insert into t_add_newcol values(1,1);

已建立 1 行。

SQL> insert into t_add_newcol values(2,2);

已建立 1 行。

SQL> commit;

提交完成。

SQL> select * from t_add_newcol;

         A          B
---------- ----------
         1          1
         2          2

SQL> alter table t_add_newcol add new_c int;

表已更改。

SQL> select * from t_add_newcol;

         A          B      NEW_C
---------- ---------- ----------
         1          1
         2          2

SQL> alter table t_add_newcol modify  new_c int default 8;

表已更改。

//表明執行新增預設值的新列後,原有記錄不會發生變化,新添列還是空null
SQL> select * from t_add_newcol;

         A          B      NEW_C
---------- ---------- ----------
         1          1
         2          2



SQL> insert into t_add_newcol values(3,3,default)
  2  ;

已建立 1 行。

SQL> commit;

提交完成。

SQL> select * from t_add_newcol;

         A          B      NEW_C
---------- ---------- ----------
         1          1
         2          2
         3          3          8 

SQL> insert into t_add_newcol(a,b) values(4,4);

已建立 1 行。

SQL> commit;

提交完成。

SQL> select * from t_add_newcol;

         A          B      NEW_C
---------- ---------- ----------
         1          1
         2          2
         3          3          8
         4          4          8


//透過檢視實現向表中新增預設值新列後,讓新添列顯示(新增列前後)預設值
SQL> create view view_add_newcol
  2  (a,b,new_c)
  3  as
  4  select a,b,nvl(new_c,8) from t_add_newcol;

檢視已建立。

SQL> select * from view_add_newcol;

         A          B      NEW_C
---------- ---------- ----------
         1          1          8
         2          2          8
         3          3          8
         4          4          8


小結:
 1,檢視可以很好的使用,用得好,實利於工作
     2,在生產系統中,重大操作要分批次進行,比如上述的ddl分多批次進行,這樣
  對業務影響減小
    3,基本概念掌握相當重要,這樣才會有更精細的方案.防止操作失誤出現

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-719909/,如需轉載,請註明出處,否則將追究法律責任。

相關文章