2011-07-27 34 views

回答

11
  1. 其值從VARCHAR列添加CLOB列於表
  2. 更新CLOB列
  3. 下降VARCHAR列
  4. 命名CLOB列,VARCHAR列名
51

(如以前的答案)和下面的代碼:

ALTER TABLE atable 
ADD (tmpdetails CLOB); 

UPDATE atable SET tmpdetails=details; 
COMMIT; 

ALTER TABLE atable DROP COLUMN details; 

ALTER TABLE atable 
RENAME COLUMN tmpdetails TO details; 
+6

+1如果我們在單個會話中執行此操作,則不需要COMMIT,因爲隨後的ALTER TABLE語句會發出隱式提交(實際上是兩個)。 – APC

+0

但是這不會保持您的列的位置。它會將您的列移動到表格末尾。所以如果你想保持你的專欄的位置以及遵循這些步驟。 –

+2

對不起,但我只是回答這個問題,我猜如果你在表中使用select *,那麼列順序將很重要,但我首先會質疑這種方法的完整性。 –

7

類似的問題,但是這不會保持你列的位置。它會將您的列移動到表格末尾。所以如果你想保持你的專欄的位置以及遵循這些步驟。

alter table atable add (tempdetails varchar2(4000)); 
update atable set tempdetails = details; 
update atable set details = null; -- this is necessary to change data type 
alter table atable modify details long; -- this is required because you can not change directly to clob. 
alter table atable modify details clob; 
update atable set details=tempdetails; 
alter table atable drop column tempdetails; 

這是即使在更改數據類型後仍然保持數據和列位置不變的方式。有關示例的詳細信息,請參見此處:http://www.oraclebin.com/2012/12/how-to-change-varchar2-to-clob-datatype.html

+0

嗨,這個答案是有效的,但第三個陳述必須改變如下: 更新atable設置的詳細信息= null; - 這是改變數據類型所必需的 –

相關問題