首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

Oracle 將 VARCHAR2 欄位轉換為 CLOB 的三種實用方法:適用有無資料情況

     編輯:Oracle 教學

Oracle VARCHAR2 轉 CLOB 三種實用方法

業務增長導致 VARCHAR2(4000) 不敷使用,需轉為 CLOB。直接 ALTER TABLE ... MODIFY col CLOB 會報 ORA-22858。本文提供三種適用不同場景的解決方案。

準備環境

CREATE TABLE TB_WITHOUT_DATA (ID NUMBER, NAME VARCHAR2(100), DESCRIPTION VARCHAR2(2000));
CREATE TABLE TB_WITH_DATA (ID NUMBER, NAME VARCHAR2(100), DESCRIPTION VARCHAR2(2000));
INSERT INTO TB_WITH_DATA VALUES (1, 'David', 'Short text'); COMMIT;

方法一:經由 LONG 中轉 (僅限空欄位)

ALTER TABLE TB_WITHOUT_DATA MODIFY DESCRIPTION LONG;
ALTER TABLE TB_WITHOUT_DATA MODIFY DESCRIPTION CLOB;

限制:有資料時執行第一步會報 ORA-01439: column to be modified must be empty。

方法二:重命名舊欄 → 新增 CLOB 欄 → 複製資料 → 刪除舊欄 (通用)

-- 1. 重命名
ALTER TABLE TB_WITH_DATA RENAME COLUMN DESCRIPTION TO DESCRIPTION_BAK;
ALTER TABLE TB_WITHOUT_DATA RENAME COLUMN DESCRIPTION TO DESCRIPTION_BAK;

-- 2. 新增 CLOB 欄
ALTER TABLE TB_WITH_DATA ADD DESCRIPTION CLOB;
ALTER TABLE TB_WITHOUT_DATA ADD DESCRIPTION CLOB;

-- 3. 複製資料 (有資料表才需)
UPDATE TB_WITH_DATA SET DESCRIPTION = DESCRIPTION_BAK; COMMIT;

-- 4. 刪除備份欄
ALTER TABLE TB_WITH_DATA DROP COLUMN DESCRIPTION_BAK;
ALTER TABLE TB_WITHOUT_DATA DROP COLUMN DESCRIPTION_BAK;

方法三:重建表搭配 TO_CLOB (通用、最乾淨)

-- 1. 重命名舊表
RENAME TB_WITH_DATA TO TB_WITH_DATA_BAK;
RENAME TB_WITHOUT_DATA TO TB_WITHOUT_DATA_BAK;

-- 2. 建立新表並轉換
CREATE TABLE TB_WITH_DATA AS
SELECT ID, NAME, TO_CLOB(DESCRIPTION) DESCRIPTION FROM TB_WITH_DATA_BAK;

CREATE TABLE TB_WITHOUT_DATA AS
SELECT ID, NAME, TO_CLOB(DESCRIPTION) DESCRIPTION FROM TB_WITHOUT_DATA_BAK;

-- 3. 驗證結構與資料
DESC TB_WITH_DATA;  -- DESCRIPTION 應為 CLOB
SELECT * FROM TB_WITH_DATA;

-- 4. 刪除備份表
DROP TABLE TB_WITH_DATA_BAK;
DROP TABLE TB_WITHOUT_DATA_BAK;

驗證結果

DESC TB_WITH_DATA
Name          Null Type
------------- ---- -------------
ID                  NUMBER
NAME                VARCHAR2(100)
DESCRIPTION         CLOB

SELECT * FROM TB_WITH_DATA;
ID NAME    DESCRIPTION
--- ------- ----------------
1   David   Short text

建議選擇

  • 空表:方法一最快。
  • 有資料表:方法二不需重建索引/權限/觸發器;方法三最徹底但需重建相關物件。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved