Oracle10g 将当前CLOB列复制到Oracle中的新BLOB列
我有一个带有Oracle10g 将当前CLOB列复制到Oracle中的新BLOB列,oracle10g,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) v
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的函数,如下所示:
坦率地说,我从另一个来源获取了这个函数,但是你会感到困惑,因为在那个论坛上有一个讨论,这就是为什么我在这里没有提到/
输出
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
我的信息来自 在此处复制代码以避免死链接:
CREATE OR REPLACE FUNCTION clob_to_blob(p_clob IN CLOB) RETURN BLOB IS
v_blob BLOB;
v_offset NUMBER DEFAULT 1;
v_amount NUMBER DEFAULT 4096;
v_offsetwrite NUMBER DEFAULT 1;
v_amountwrite NUMBER;
v_buffer VARCHAR2(4096 CHAR);
BEGIN
dbms_lob.createtemporary(v_blob, TRUE);
Begin
LOOP
dbms_lob.READ (lob_loc => p_clob,
amount => v_amount,
offset => v_offset,
buffer => v_buffer);
v_amountwrite := utl_raw.length (r => utl_raw.cast_to_raw(c => v_buffer));
dbms_lob.WRITE (lob_loc => v_blob,
amount => v_amountwrite,
offset => v_offsetwrite,
buffer => utl_raw.cast_to_raw(v_buffer));
v_offsetwrite := v_offsetwrite + v_amountwrite;
v_offset := v_offset + v_amount;
v_amount := 4096;
END LOOP;
EXCEPTION
WHEN no_data_found THEN
NULL;
End;
RETURN v_blob;
END clob_to_blob;
这对我来说是有效的,即使dbms_lob.converttoclob没有。谢谢你的回答。警告应该是一个指示转换错误的
out
参数。它不应该预先设置为错误。另外,我所有更新的BLOB似乎都设置为null。@ipavlic:你能发布你的clob数据吗,我指的是任何数据record@ipavlic:对于out参数,您需要自行处理,这取决于您更新记录的方式以及更新警告消息的位置。对于数据,否,我不能。它是一个简单的xml文件。至于参数:在我看来,您提前将其定义为一个错误。如果未在函数中更改它,它将保持错误状态。我错过什么了吗?
CREATE OR REPLACE FUNCTION clob_to_blob(p_clob IN CLOB) RETURN BLOB IS
v_blob BLOB;
v_offset NUMBER DEFAULT 1;
v_amount NUMBER DEFAULT 4096;
v_offsetwrite NUMBER DEFAULT 1;
v_amountwrite NUMBER;
v_buffer VARCHAR2(4096 CHAR);
BEGIN
dbms_lob.createtemporary(v_blob, TRUE);
Begin
LOOP
dbms_lob.READ (lob_loc => p_clob,
amount => v_amount,
offset => v_offset,
buffer => v_buffer);
v_amountwrite := utl_raw.length (r => utl_raw.cast_to_raw(c => v_buffer));
dbms_lob.WRITE (lob_loc => v_blob,
amount => v_amountwrite,
offset => v_offsetwrite,
buffer => utl_raw.cast_to_raw(v_buffer));
v_offsetwrite := v_offsetwrite + v_amountwrite;
v_offset := v_offset + v_amount;
v_amount := 4096;
END LOOP;
EXCEPTION
WHEN no_data_found THEN
NULL;
End;
RETURN v_blob;
END clob_to_blob;