String oracle 8将字符转换为长/blob

String oracle 8将字符转换为长/blob,string,oracle,char,blob,long-integer,String,Oracle,Char,Blob,Long Integer,我正在尝试在Oracle8中将字符串转换为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.getlen

我正在尝试在Oracle8中将字符串转换为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;
函数lob2char(clob_col clob)返回varchar2为
缓冲区varchar2(4000);
金额二进制整数:=4000;
pos整数:=1;
l clob;
bfils文件;
l_var varchar2(4000):='';
开始
环

如果dbms_lob.getlength(clob_col)我不确定您是否考虑过度了。
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;
/
演示。我相信在8i和现在的11g中,一切都是一样的


PL/SQL
varchar2
最多可以达到32k,并且仍然可以这样插入。

为什么有一个长数据类型的列?自从大约10年前引入CLOB以来,LONG数据类型一直被弃用。Oracle不建议您使用长数据类型,它只支持向后兼容性。我刚刚在谷歌上搜索了“Oracle convert long to clob”,点击率很高…@Rene-他们仍然在8i上,如果我没记错的话,它引入了LOB,你会惊讶于他们仍然在使用long?似乎是他们最不关心的问题*8-)我不认为它们当时被正式取消了支持,但迁移已经得到了鼓励。您的字符串来自哪里-它已经是
varchar2
?只将字符串值赋给
long
变量或列有什么错?您显示的代码似乎与此无关,而且确实不清楚您要做什么。它在那里,是一个旧系统,我无法更改它,我有varchar(字符串),我需要将其存储到该列(键入long)是的,我考虑过了。我使用了utl_raw.cast_to_raw(“…”),效果很好。@babboon-您正在将字符数据放入
blob
?为什么?您应该对字符数据使用
clob