Oracle DBでvarcharとして設計された列detailsがあります。このDBは現在お客様に使用されており、一部の行にはすでにデータが格納されています。
次に、列detailsを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;
しかし、これは列の位置を維持しません。列がテーブルの最後に移動します。したがって、列の位置を維持したい場合は、次の手順に従ってください。
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
プロセス中にテーブルデータにアクセスできるようにする必要がある場合。DBMS_REDEFINITIONを確認してください。
asktomで同様の質問を参照してください http://asktom.Oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1770086700346491686