2

列のあるテーブルがありCLOBます。既存のデータをデータ型に変換したいと思いBLOBます。それはで失敗しORA-252858 invalid alteration of datatypeます。

新しいBLOB列を作成し、既存のデータをそれにコピーしてから、既存のCLOB列を削除することについて考えました。

CLOB列から列にコピーするにはどうすればよいBLOBですか?

4

2 に答える 2

3
create table temp(col_clob clob,col_blob blob);

insert into temp (col_clob) values('hi i am gaurav soni');
insert into temp (col_clob) values('hi i am gaurav soni');
insert into temp (col_clob) values('hi i am gaurav soni');
insert into temp (col_clob) values('hi i am gaurav soni');
insert into temp (col_clob) values('hi i am gaurav soni');

/以下に示すように、クロブをブロブに変換する関数を作成する必要があります。率直に言って、私はこの関数を別のソースから取得しましたが、そのフォーラムで議論が行われているため混乱するでしょう。 /

create or replace function CLOB_TO_BLOB (p_clob CLOB) return BLOB
as
 l_blob          blob;
 l_dest_offset   integer := 1;
 l_source_offset integer := 1;
 l_lang_context  integer := DBMS_LOB.DEFAULT_LANG_CTX;
 l_warning       integer := DBMS_LOB.WARN_INCONVERTIBLE_CHAR;
BEGIN

  DBMS_LOB.CREATETEMPORARY(l_blob, TRUE);
  DBMS_LOB.CONVERTTOBLOB
  (
   dest_lob    =>l_blob,
   src_clob    =>p_clob,
   amount      =>DBMS_LOB.LOBMAXSIZE,
   dest_offset =>l_dest_offset,
   src_offset  =>l_source_offset,
   blob_csid   =>DBMS_LOB.DEFAULT_CSID,
   lang_context=>l_lang_context,
   warning     =>l_warning
  );
  return l_blob;
END;

--update the col_blob with the function we have created above 

 update temp set col_blob = clob_to_blob(col_clob);

select * from temp; 

出力

 COL_CLOB                               COL_BLOB           
-------------------------------------- -------------------
hi i am gaurav soni                    hi i am gaurav soni
hi i am gaurav soni                    hi i am gaurav soni
hi i am gaurav soni                    hi i am gaurav soni
hi i am gaurav soni                    hi i am gaurav soni
hi i am gaurav soni                    hi i am gaurav soni
于 2012-07-23T19:05:57.443 に答える