Sql 将小的或长的原始值转换为其他类型

Sql 将小的或长的原始值转换为其他类型,sql,oracle,Sql,Oracle,我有一个Oracle表,其中包含一个包含ASCII字符数据的长原始类型字段。如何编写一个查询或视图,将其转换为更容易使用的字符串?这些总是单字节字符,FWIW。我发现了这句话: 在Oracle9i中,您甚至可以: alter table old_table modify(c clob ); 转换它 请看这里: 编辑 varchar2列的最大长度为4000。是不是太短了 我发现这在CLOB数据类型上非常有效。我相信LOB类型也是如此 create or replace function lob2c

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

我发现了这句话:

在Oracle9i中,您甚至可以:

alter table old_table modify(c clob );

转换它

请看这里:

编辑


varchar2列的最大长度为4000。是不是太短了

我发现这在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;
创建或替换函数lob2char(clob_col clob)返回varchar2为
缓冲区varchar2(4000);
金额二进制整数:=4000;
pos整数:=1;
l clob;
bfils文件;
l_var varchar2(4000):='';
开始
环
如果dbms_lob.getlength(clob_col)可能

select…,从旧表中选择lob(long\u raw)

()


()。

一个现有的、相当脆弱的应用程序目前正在使用这个表,因此我不想修改现有的表,因为我担心会破坏纸牌屋。
UTL_RAW.CAST_TO_VARCHAR2(b)