列のあるテーブルがありCLOB
ます。既存のデータをデータ型に変換したいと思いBLOB
ます。それはで失敗しORA-252858 invalid alteration of datatype
ます。
新しいBLOB
列を作成し、既存のデータをそれにコピーしてから、既存のCLOB
列を削除することについて考えました。
CLOB
列から列にコピーするにはどうすればよいBLOB
ですか?
列のあるテーブルがありCLOB
ます。既存のデータをデータ型に変換したいと思いBLOB
ます。それはで失敗しORA-252858 invalid alteration of datatype
ます。
新しいBLOB
列を作成し、既存のデータをそれにコピーしてから、既存のCLOB
列を削除することについて考えました。
CLOB
列から列にコピーするにはどうすればよいBLOB
ですか?
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