zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    解决CentOS(6和7版本),/etc/sysconfig/下没有iptables的问题
    centOS7在VirtualBox中装好后的网络连接问题
    [bzoj1022/poj3480]小约翰的游戏John_博弈论
    [poj2311]Cutting Game_博弈论
    [poj1704]Georgia and Bob_博弈论
    [poj2368]Buttons_博弈论
    NOIP2015 提高组合集
    NOIP2014 提高组合集
    NOIP2013 提高组合集
    NOIP2012 提高组合集
  • 原文地址:https://www.cnblogs.com/saotao/p/4600477.html
Copyright © 2011-2022 走看看