select * from d_41_001 t; create or replace procedure get_blob ( t_ywlsh varchar2,out_blob out varchar2 ) as load_blob blob; amount int; offset int:=1; buffer varchar2(3000); begin select tabd4101_sqs into load_blob from d_41_001 where ywlsh=t_ywlsh; amount:=dbms_lob.getlength(load_blob); dbms_lob.read(load_blob,amount,offset,buffer); out_blob:=utl_raw.cast_to_varchar2(buffer); end; declare out_string varchar2(3000); begin get_blob('WH-A4120101201027041',out_string); end; create or replace procedure get_blob (t_ywlsh varchar2,poname varchar2) IS l_file UTL_FILE.FILE_TYPE; l_buffer RAW(32767); l_amount BINARY_INTEGER := 32767; l_pos INTEGER := 1; l_blob BLOB; l_blob_len INTEGER; BEGIN select tabd4101_sqs into l_blob from d_41_001 where ywlsh=t_ywlsh; l_blob_len := DBMS_LOB.GETLENGTH(l_blob); l_file := UTL_FILE.FOPEN('BLOBDIR',poname,'wb', 32767); WHILE l_pos < l_blob_len LOOP DBMS_LOB.READ (l_blob, l_amount, l_pos, l_buffer); dbms_output.put_line(l_buffer); UTL_FILE UTL_FILE.PUT_RAW(l_file, l_buffer, TRUE); l_pos := l_pos + l_amount; END LOOP; UTL_FILE.FCLOSE(l_file); END;