我有一列詳細信息設計爲oracle DB中的varchar,此DB現在用於客戶,並且某些行已存儲數據。如何在oracle中將column varchar更改爲clob
現在我想將列的詳細信息更改爲Clob列。什麼是實現這個一個聰明的辦法?
我有一列詳細信息設計爲oracle DB中的varchar,此DB現在用於客戶,並且某些行已存儲數據。如何在oracle中將column varchar更改爲clob
現在我想將列的詳細信息更改爲Clob列。什麼是實現這個一個聰明的辦法?
(如以前的答案)和下面的代碼:
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;
,如果你需要的過程中,你的表中的數據可訪問..看看 DBMS_REDEFINITION
看到asktom http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1770086700346491686
類似的問題,但是這不會保持你列的位置。它會將您的列移動到表格末尾。所以如果你想保持你的專欄的位置以及遵循這些步驟。
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
嗨,這個答案是有效的,但第三個陳述必須改變如下: 更新atable設置的詳細信息= null; - 這是改變數據類型所必需的 –
+1如果我們在單個會話中執行此操作,則不需要COMMIT,因爲隨後的ALTER TABLE語句會發出隱式提交(實際上是兩個)。 – APC
但是這不會保持您的列的位置。它會將您的列移動到表格末尾。所以如果你想保持你的專欄的位置以及遵循這些步驟。 –
對不起,但我只是回答這個問題,我猜如果你在表中使用select *,那麼列順序將很重要,但我首先會質疑這種方法的完整性。 –