web-dev-qa-db-ja.com

Oracleで列varcharをclobに変更する方法

Oracle DBでvarcharとして設計された列detailsがあります。このDBは現在お客様に使用されており、一部の行にはすでにデータが格納されています。

次に、列detailsをClob列に変更します。これを実現する賢い方法は何ですか?

28
Whtisop

(以前の答えとして)そしてこれがコードです:

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;
69
Kevin Burton
  1. テーブルにCLOB列を追加する
  2. varchar列の値でCLOB列を更新する
  3. varchar列を削除する
  4. clob列の名前をvarchar列名に変更
11
Rene

しかし、これは列の位置を維持しません。列がテーブルの最後に移動します。したがって、列の位置を維持したい場合は、次の手順に従ってください。

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

10
Sushant Butta

プロセス中にテーブルデータにアクセスできるようにする必要がある場合。DBMS_REDEFINITIONを確認してください。

asktomで同様の質問を参照してください http://asktom.Oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1770086700346491686

1
ShoeLace