Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.server -> Re: Convert to BLOB?
A copy of this was sent to Sandijs Jercums <sandijs_at_it.lv>
(if that email address didn't require changing)
On Tue, 28 Dec 1999 11:39:43 GMT, you wrote:
>Hi!
>
>Can anyone help me? I need to know, how to convert varchar, long, long raw
>and CLOB to BLOB using PL/SQL (Oracle8 Enterprise Edition Release
>8.0.5.1.0).
>
>Thanks,
>
>Sandijs
In Oracle8i, release 8.1, you can use the builtin TO_LOB() function to do this.
In 8.0.5 you can do it using dbms_lob and a little procedural code for all varchar's, longs (of any size) and LONG RAWS that are 32k or less.
Here is an example that converts any size long into a CLOB:
create or replace procedure long2clob( p_query in varchar2, p_bindvar in varchar2, p_clob in out clob )as
l_cursor integer default dbms_sql.open_cursor; l_long_val varchar2(20); l_long_len number; l_buflen number := 20; l_curpos number := 0; l_n number;
dbms_sql.parse( l_cursor, p_query, dbms_sql.native );
dbms_sql.bind_variable( l_cursor, ':bv', p_bindvar ); dbms_sql.define_column_long(l_cursor, 1); l_n := dbms_sql.execute(l_cursor);
if (dbms_sql.fetch_rows(l_cursor)>0) then
loop dbms_sql.column_value_long(l_cursor, 1, l_buflen, l_curpos , l_long_val, l_long_len ); exit when l_long_len = 0; dbms_lob.write( p_clob, l_long_len, l_curpos+1, l_long_val ); l_curpos := l_curpos + l_long_len; end loop;
when others then
if dbms_sql.is_open(l_cursor) then dbms_sql.close_cursor(l_cursor); end if; raise;
drop table test;
create table test ( y clob );
declare
l_clob clob;
begin
for x in ( select view_name from user_views where rownum < 25 ) loop
insert into test values ( empty_clob() ) returning y into l_clob; long2clob( 'select text from user_views where view_name = :bv', x.view_name, l_clob );
Here is an example that converts a LONG RAW that is 32k or less into a BLOB
declare
l_blob blob;
begin
for x in ( select LONG_RAW_COLUMN from T ) loop
insert into test values ( empty_blob() ) returning blob_column into l_blob; dbms_lob.write( l_blob, utl_raw.length(x.long_raw_column), 1, l_blob );end loop;
the varchar2 example would be very similar, or it can be simply:
tkyte_at_8.0> create table t ( x clob );
Table created.
tkyte_at_8.0> insert into t select username from all_users where rownum < 5;
4 rows created.
tkyte_at_8.0> select * from t;
X
(a simple insert into will do for varchars)
--
See http://osi.oracle.com/~tkyte/ for my columns 'Digging-in to Oracle8i'...
Current article is "Part I of V, Autonomous Transactions" updated June 21'st
Thomas Kyte tkyte_at_us.oracle.com Oracle Service Industries Reston, VA USA
Opinions are mine and do not necessarily reflect those of Oracle Corporation Received on Tue Dec 28 1999 - 07:32:26 CST
![]() |
![]() |