将小型Oracle长原始值转换为其他类型

时间:2009-01-08 21:35:49

标签: sql oracle

我有一个Oracle表,其中包含一个包含ASCII字符数据的LONG RAW类型的字段。如何编写将其转换为更容易使用的字符串的查询或视图?它们总是单字节字符,FWIW。

3 个答案:

答案 0 :(得分:2)

也许

select ...., to_lob(long_raw) from old_table

http://www.psoug.org/reference/convert_func.html

UTL_RAW.CAST_TO_VARCHAR2(b) 

http://www.dbasupport.com/forums/showthread.php?t=5342)。

答案 1 :(得分:0)

我发现了这句话:

  

在Oracle9i中,您甚至可以:

     

alter table old_table modify(c clob   );

     

转换它。

见这里:http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1037232794454

修改

varchar2列的最大长度为4000.这是否太短?

答案 2 :(得分: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;