oracle10g - 将当前 CLOB 列复制到 Oracle 中的新 BLOB 列

标签 oracle10g

我有一个带有 CLOB 列的表。我想将现有数据转换为 BLOB 数据类型。由于ORA-252858 数据类型的无效更改而失败。

我考虑创建一个新的 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');

/您需要创建一个将 clob 转换为 blob 的函数,如下所示: 坦率地说,我从另一个来源获取了这个功能,但是你会感到困惑,因为该论坛上正在进行讨论,这就是为什么我在这里没有提到/

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

关于oracle10g - 将当前 CLOB 列复制到 Oracle 中的新 BLOB 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11612181/

相关文章:

java - 为什么servlet中的数据没有插入到sql数据库中?

oracle - 立即执行中的批量收集限制

oracle - 什么会导致 Oracle 忽略请求它执行直接路径加载的 APPEND 提示?

sql - Oracle 10g 范围分区查询

oracle - 从哪里获得Oracle SERVICE_NAME?

debugging - 查找行删除的 PL/SQL 源

sql - 从多个表复制字段以创建新表

plsql - 创建一个返回表的 Oracle 函数

oracle - 递归列出 Oracle DBA_DEPENDENCIES View 的内容

oracle - 需要一个oracle函数将字符串转换为字节数组