2009-01-08 96 views

回答

0

我發現這句話:

在Oracle9i中,你甚至可以:

ALTER TABLE OLD_TABLE修改(C CLOB );

將其轉換。

在這裏看到:http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1037232794454

編輯

一個VARCHAR2列的最大長度是4000是不是太短了?

+0

現有的和非常脆弱的應用程序當前使用這張表,所以我不想修改現有的表格,因爲害怕敲開卡片房子。 – 2009-01-08 22:05:32

0

我發現這在CLOB數據類型上工作得很好。我相信對於LOB類型也是如此。

create or replace function lob2char(clob_col clob) return varchar2 IS 
buffer varchar2(4000); 
amt BINARY_INTEGER := 4000; 
pos INTEGER := 1; 
l clob; 
bfils bfile; 
l_var varchar2(4000):=''; 
begin 
LOOP 
if dbms_lob.getlength(clob_col)<=4000 THEN 
dbms_lob.read (clob_col, amt, pos, buffer); 
l_var := l_var||buffer; 
pos:=pos+amt; 
ELSE 
l_var:= 'Cannot convert. Exceeded varchar2 limit'; 
exit; 
END IF; 
END LOOP; 
return l_var; 
EXCEPTION 
WHEN NO_DATA_FOUND THEN 
return l_var; 
END; 



INSERT INTO NEWTABLE (NEWCOLUMN) SELECT RTRIM(lob2char(OLDCOLUMN)) FROM OLDTABLE; 
+0

什麼是LOOP? – 2009-01-08 21:59:51

相關問題