Oracle中Blob转换成Clob

假如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_clob    CLOB;
    v_varchar VARCHAR2(32767);
    v_start   PLS_INTEGER := 1;
    v_buffer  PLS_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;
时间: 2024-10-13 20:59:06

Oracle中Blob转换成Clob的相关文章

oracle中Blob和Clob类型的区别

一.oracle中Blob和Clob类型的区别BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是可以直接存储文字的.其实两个是可以互换的的,或者可以直接用LOB字段代替这两个.但是为了更好的管理ORACLE数据库,通常像图片.文件.音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去.而像文章或者是较长的文字,就用CLOB存储,这样对以后的查询更新存储等操作都提供很大的方便. BLOB全称为二进制大型对象(Binary Large Object).它用于存储数据

(转载)VB 查询Oracle中blob类型字段,并且把blob中的图片以流的方式显示在Image上

原文摘自:http://heisetoufa.iteye.com/blog/504068 '模块代码 Private Declare Function CreateStreamOnHGlobal Lib "ole32" (ByVal hGlobal As Long, ByVal fDeleteOnRelease As Long, ppstm As Any) As Long Private Declare Function OleLoadPicture Lib "olepro3

iOS中NSString转换成HEX(十六进制)-NSData转换成int

http://www.2cto.com/kf/201402/281501.html 1 2 3 4 5 6 NSString *str = @"0xff055008"; //先以16为参数告诉strtoul字符串参数表示16进制数字,然后使用0x%X转为数字类型 unsigned long red = strtoul([str UTF8String],0,16); //strtoul如果传入的字符开头是“0x”,那么第三个参数是0,也是会转为十六进制的,这样写也可以: unsigned

c++中double转换成string型(浮点数的格式化)

在日常编程中--包括对话框.关系数据库.金融程序.SMS程序及一切处理数据文件的程序,需要控制小数点后的小数位的情况非常普遍,本文中将要讲 解如何用简单的方法来控制小数位,另外,还要揭开字符串及数据精度的一点点小秘密. 问题的引出 如有一个函数,其可接受一个long double参数,并将参数转换为字符串,结果字符串应保留两位小数,例如,浮点值123.45678应该生成“123.45”这样的字符串.表面上看来 这是一个意义不大的编程问题,然而,如果真要在实际中派上用场,函数应设计为具有一定弹性,

Oracle中的转换函数

Oracle中的转换函数有三个,分别为to_char(),to_date(),to_number() 1.to_char()的用法 格式化当前的日期时间 select sysdate,to_char(sysdate,'yyyy-mm-dd') from dual select sysdate,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual select sysdate,to_char(sysdate,'yyyy') from dual 2.t

pdf转cad怎么转换?可以将PDF格式的图纸中挨次转换成CAD格式吗?

pdf转cad怎么转换?可以将PDF格式的图纸中挨次转换成CAD格式吗?相信不少的小伙伴都会有这样的疑问,在平时的工作中对于CAD欢欢PDF格式的操作可以说早就已经是熟门熟路了,相比之下,我们可能就会更加担心可不可与=以将怕的图纸转化成为CAD格式了! pdf转cad怎么转换?可以将PDF格式的图纸中挨次转换成CAD格式吗?答案当然是肯定 的了,接下来就带各位小伙伴们了解一下怎么将[地方格式图纸转换成为CAD格式吧!操作步骤如下: 1.在我们的电脑浏览器中搜索"CAD在线转换"进入CA

oracle中日期转换

oracle中,日期转换函数有很多,常用命令如下: to_char()命令将时间戳转换为用户规定的日期格式,如: SELECT TO_CHAR(sysdate,'YYYY-MM-DD hh24:mi:ss') FROM DUAL; 语法:TO_CHAR(X [,format]) 说明:将X按format格式转换成字符串.X可以是日期或者数字或时间戳,format是一个规定了X采用何种格式转换的格式字符串 to_date()命令可以将一个日期格式的字符串转换成date类型数据,如: SELECT 

使用SSH操作Oracle中BLOB大对象

package entity; /** * Bigobject entity. @author MyEclipse Persistence Tools */ public class Bigobject implements java.io.Serializable { // Fields private Integer id; private byte[] tblob; private String filename; // Constructors /** default construct

C# 中字符串转换成日期

我们在处理字符串日期格式常用DateTime.Pares() 但是这个形式的转换是相当有限的,有些C#是会不懂你写入的日期格式的如20031231.那么类似 "20100101" 或者其它形式的字符串如何转换成日期型呢? 一.拼接字符串的形式  DateTime dt=Convert.ToDateTime("20100101".Substring(0,4)+"-"+"20100101".Substring(4,2)+"