Обычно типы данных BLOB используются для хранения двоичных объектов, таких как изображения, видео и т. Д. c. Однако, если у вас есть большой двоичный объект, содержащий символы вместо двоичных данных , вы можете сделать следующее:
1. Создает функцию для возврата большого двоичного объекта в объект класса
create or replace function blob_to_char (b blob)
return clob is
v_clob clob;
n number;
v_start pls_integer := 1;
v_buffer pls_integer := 32767;
v_varchar varchar2(32767);
begin
if (b is null)
then
return null;
end if;
if (dbms_lob.getlength(b)=0)
then
return empty_clob();
end if;
dbms_lob.createtemporary(v_clob,true);
for i in 1..ceil(dbms_lob.getlength(b) / v_buffer)
loop
v_varchar := utl_raw.cast_to_varchar2(dbms_lob.substr(b, v_buffer, v_start));
dbms_lob.writeappend(v_clob, length(v_varchar), v_varchar);
v_start := v_start + v_buffer;
end loop;
RETURN v_clob;
end blob_to_char;
2. Затем вы можете использовать эту функцию в любом операторе select, чтобы восстановить свой blob-объект как строку символов. Очевидно, я предполагаю, что BLOB на самом деле является строкой.
select column1, column2 , blob_to_char(your_blob_column) from your table ;
Пример
SQL> create table t ( c1 number, c2 blob );
Table created.
SQL> insert into t values ( 1 , utl_raw.cast_to_raw('ppppppppppppppppppppppppppdoekkkkkkkkkkkkkkkkkkffj') ) ;
1 row created.
SQL> commit;
SQL> create or replace function blob_to_char
2 ( b blob)
return clob is
v_clob clob;
n number;
v_start pls_integer := 1;
v_buffer pls_integer := 32767;
v_varchar varchar2(327 3 67);
begin
if (b is null)
then
4 5 6 7 8 9 10 11 12 return null;
end if;
13 14 if (dbms_lob.getlength(b)=0)
then
return empty_clob();
15 16 17 end if;
dbms_lob.createtemporary(v_clob,true);
for i in 1..ceil(dbms_lob.getlength(b) / v_buffer)
loop
v_varchar := utl_raw.cast_to_varchar2(dbms_lob.substr(b, v_buffer, v_start));
18 19 20 21 22 dbms_lob.writeappend(v_clob, length(v_varchar), v_varchar);
v_start := v_start + v_buffer;
end loop;
RETURN v_clob;
23 24 25 26 end;
27 /
Function created.
SQL> select c1 , blob_to_char(c2) from t ;
C1
----------
BLOB_TO_CHAR(C2)
--------------------------------------------------------------------------------
1
ppppppppppppppppppppppppppdoekkkkkkkkkkkkkkkkkkffj
Тем не менее, хранить большой текст или строки с помощью BLOB - это очень плохая практика. , для этого вы должны всегда использовать CLOB, для чего он предназначен.
Обновление
Если ваш BLOB очень большой, попробуйте увеличить вывод
SQL> SET LONG 99999999
SQL> SELECT blob_to_char(blobcolum) from yourtable ;