急求:oracle存储过程???
oracle入门级,想写个存储过程供pro*c调用,将byte型数据存入blob型字段表中,byte型数据通过varchar2传入。下面自己写的,调用后表中出现很多0x3F,应该是cast_to_raw导致的,怎么解决?是否还有其他问题???
procedure write(i_lob_loc in out nocopy BLOB, i_data in VARCHAR2) as
p_buffer raw(2048);
p_size number := lengthb(i_data);
p_offset number := 0;
p_tmp varchar(2048);
begin
if p_size > 0 then
if p_size <= 2048 then
p_buffer := utl_raw.cast_to_raw(i_data);
dbms_lob.write(i_lob_loc, p_size, 1, p_buffer);
else
p_tmp := substr(i_data, 0, 2048);
p_buffer := utl_raw.cast_to_raw(p_tmp);
dbms_lob.write(i_lob_loc, 2048, 1, p_buffer);
p_size := p_size - 2048;
p_offset := p_offset + 2048;
while p_size > 0 loop
begin
if p_size <= 2048 then
p_tmp := substr(i_data, p_offset, p_size);
p_buffer := utl_raw.cast_to_raw(p_tmp);
dbms_lob.writeappend(i_lob_loc, p_size, p_buffer);
p_size := 0;
else
p_tmp := substr(i_data, p_offset, 2048);
p_buffer := utl_raw.cast_to_raw(p_tmp);
dbms_lob.writeappend(i_lob_loc, 2048, p_buffer);
p_size := p_size - 2048;
end if;
end;
end loop;
end if;
end if;
end;