加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle中Blob转换成Clob

发布时间:2020-12-12 15:50:49 所属栏目:百科 来源:网络整理
导读:转载:http://blog.sina.com.cn/s/blog_59ca2c2a0101ilv1.html 假如tab表中的c_xml字段原来是blob类型,我们要将其转换为clob类型,如果表中有数据的话,是无法直接通过alert语句去修改的。通过以下方法可以将blob类型的字段改为clob类型。 首先在oracle中创

转载:http://blog.sina.com.cn/s/blog_59ca2c2a0101ilv1.html


假如tab表中的c_xml字段原来是blob类型,我们要将其转换为clob类型,如果表中有数据的话,是无法直接通过alert语句去修改的。通过以下方法可以将blob类型的字段改为clob类型。

首先在oracle中创建一个function,代码如下:

--先创建Blog转换为Clob的function
CREATE OR REPLACE FUNCTION BlobToClob(blob_in IN BLOB) RETURN CLOB AS
v_clobCLOB;
v_varchar VARCHAR2(32767);
v_startPLS_INTEGER := 1;
v_bufferPLS_INTEGER := 32767;
BEGIN
DBMS_LOB.CREATETEMPORARY(v_clob,TRUE);
FOR i IN 1 .. CEIL(DBMS_LOB.GETLENGTH(blob_in) / v_buffer) LOOP
v_varchar := UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(blob_in,v_buffer,v_start));
DBMS_LOB.WRITEAPPEND(v_clob,LENGTH(v_varchar),v_varchar);
DBMS_OUTPUT.PUT_LINE(v_varchar);
v_start := v_start + v_buffer;
END LOOP;
RETURN v_clob;
END BlobToClob;

然后创建备份表,以防数据丢失。代码如下:

create table tab2 AS SELECT * FROM tab;

删除表中blob列,添加clob列。代码如下:

-- 删除c_xml列
alter table tab drop column c_xml;
-- 添加c_xml列,类型为clob
alter table tab add c_xml clob;

最后将备份出去的数据恢复回来。代码如下:

--在命令模式下执行如下代码,将备份到tab2中的c_xml中的数据恢复到tab中来
DECLARE
task_id NUMBER;
sour_blob BLOB;
dest_clob CLOB;
userRow tab2%rowtype;
cursor userRows is select * from tab2;
BEGIN
for userRow in userRows loop
task_id := userRow.n_task_id;
sour_blob := userRow.c_xml;
dest_clob := blobtoclob(sour_blob);

UPDATE tab SET c_xml = dest_clob WHERE n_task_id = task_id;
COMMIT;
end loop;
END;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读