2009-01-08 86 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

相关问题