我试图在oracle 8中将字符串转换为long。我该怎么做?我只有从blob到char的版本。
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;
无法在google上找到任何地方。
答案 0 :(得分:1)
我不确定你是否只是过度思考这个问题。 varchar2
总是小于long
或clob
,因此您可以只分配您的值。这是导致问题的另一种方式。您可以在SQL中执行此操作:
insert into t42 (long_val, clob_val)
values ('any string up to 4000 chars', 'any other string up to 4000 chars');
或者来自PL / SQL:
declare
char_val varchar2(4000);
begin
char_val := 'another string';
insert into t42 (long_val, clob_val)
values (char_val, char_val);
end;
/
SQl Fiddle演示。我相信8i中的所有功能都与11g中的相同。
PL / SQL varchar2
最高可达32k,仍可按此插入。