oracle数据库clob字段处理
admin
2023-01-25 18:02:49
0

1、指定待插入字符串类型为clob,可以使用过程或存储过程

例子:

DECLARE

 REALLYBIGTEXTSTRING CLOB := '待插入的海量字符串';

BEGIN

   INSERT INTO test_table VALUES('test', REALLYBIGTEXTSTRING, '0');

   commit;

end ;


2、blob字段数据转换为clob类型

CREATE OR REPLACE FUNCTION blob_to_clob (blob_in IN BLOB) RETURN CLOB

   AS

    v_clob    CLOB;

    v_varchar VARCHAR2(32767);

    v_start PLS_INTEGER := 1;

    v_buffer PLS_INTEGER := 32767;

    tmp_num number;

    BEGIN

        DBMS_LOB.CREATETEMPORARY(v_clob, TRUE); 

        tmp_num := CEIL(DBMS_LOB.GETLENGTH(blob_in) / v_buffer);

        if tmp_num > 0 then --防止传入的BLOB为NULL或长度为0时引发错误

          FOR i IN 1..tmp_num

          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);

             v_start := v_start + v_buffer;

          END LOOP;

        end if; 

        RETURN v_clob; 

    END blob_to_clob;


   2.调用blob_to_clob 来完成转换


 update gs_gift p set p.description1=blob_to_clob(p.description);

 commit;


3、sqlload 大字段(LOB类型)的导入


https://www.open-open.com/pdf/aab245f2dcdb421f9c98ec00e695b8a6.html



http://blog.itpub.net/31015730/viewspace-2147266



https://blog.csdn.net/u011364306/article/details/50598321(操作参考文章)



1)数据保存在独立的文件中


CREATE TABLE LOBTBL

(

FILEOWNER   VARCHAR2(30),

FILENAME    VARCHAR2(200),

FILESIZE    NUMBER,

FILEDATA    CLOB,

CREATE_DATE DATE

);



[oracle@cancer sqlldr]$ cat ldr_case12_2.dat

2016-1-27  15:21  183   oracle  /home/oracle/sqlldr/ldr_case11_1.dat

2016-1-27  15:22  150   oracle  /home/oracle/sqlldr/ldr_case11_1.ctl

2016-1-27  15:22  1,714 oracle  /home/oracle/sqlldr/ldr_case11_1.log

2016-1-27  16:05  166   oracle  /home/oracle/sqlldr/ldr_case11_2.ctl

2016-1-27  16:13  136   oracle  /home/oracle/sqlldr/ldr_case11_2.bad

2016-1-27  16:13  204   oracle  /home/oracle/sqlldr/ldr_case11_2.dat

2016-1-27  16:13  1,696 oracle  /home/oracle/sqlldr/ldr_case11_2.log

2016-1-27  16:35  120   oracle  /home/oracle/sqlldr/ldr_case11_3.ctl

2016-1-27  16:55  188   oracle  /home/oracle/sqlldr/ldr_case11_3.dat

2016-1-27  16:55  1,695 oracle  /home/oracle/sqlldr/ldr_case11_3.log

2016-1-27  20:15  183   oracle  /home/oracle/sqlldr/ldr_case11_4.dat

2016-1-27  20:33  126   oracle  /home/oracle/sqlldr/ldr_case11_4.ctl

2016-1-27  20:33  3     oracle  /home/oracle/sqlldr/ldr_case11_4.bad

2016-1-27  20:33  1,829 oracle  /home/oracle/sqlldr/ldr_case11_4.log

 

--控制文件



--控制文件

[oracle@cancer sqlldr]$ cat ldr_case12_2.ctl

LOAD DATA  

INFILE ldr_case12_2.dat  

TRUNCATE INTO TABLE LOBTBL  

(  

CREATE_DATE position(1:16) date 'yyyy-mm-dd hh34:mi',  

FILESIZE position(*+2:23) "to_number(:FILESIZE,'99,999,999')",  

FILEOWNER position(*+2:30),  

FILENAME position(*+2:68) "substr(:FILENAME,instr(:FILENAME,'/',-1)+1)",  

FILEDATA LOBFILE(FILENAME) TERMINATED BY EOF  

执行sqlldr命令,并查看结果


--执行sqlldr命令

[oracle@cancer sqlldr]$ sqlldr scott/tiger control=ldr_case12_2.ctl

要加载的数据没有分隔符,而是固定长字符串时,可以在SQL*Loader的控制文件中通过position关键字用来指定列的开始和结束位置。position通常有下面3种写法:


【SQL*Loader】SQL*Loader实验之(5)--固定长字符串数据处理时position的3种写法

http://blog.itpub.net/20335819/viewspace-698052/


相关内容

热门资讯

德国总理:美国正在被伊朗羞辱 德国之声4月27日报道,德国总理默茨在访问一所学校时表示,在当前的持续冲突中,伊朗领导层正试图羞辱美...
理响中国|“长”歌以行,风云激... 光阴如梭,东方潮阔。这里是中国的长三角,世界的长三角。无论过去、现在还是未来,这片土地都因时代而生,...
白宫:特朗普及其国安团队开会讨... 新华社华盛顿4月27日电 美国白宫新闻秘书莱维特27日在记者会上证实,总统特朗普及其国家安全团队当天...
人民日报刊文:日本放开杀伤性武... 日本放开杀伤性武器出口推高地缘冲突风险(国际论坛)常思纯《人民日报》(2026年04月28日 第 0...
医疗保障法草案二审:明确生育保... 满足多样化健康保障需求本报记者 彭 波4月27日,医疗保障法草案二审稿提请十四届全国人大常委会第二十...
天津一景区发生自转旋翼机事故1... 澎湃新闻记者 吕新文中国民用航空华北地区管理局4月22日公布《豪客通航“10•1”天津长芦汉盐旅游区...
卡塔尔埃米尔与美国总统特朗普通... 当地时间24日,卡塔尔埃米尔塔米姆与美国总统特朗普通电话,重点就中东地区局势以及伊朗与美国谈判问题交...
男子30年前被扣押2859克黄... 澎湃新闻记者 王鑫家住辽宁省大连市的潘永嘉近日向澎湃新闻反映称,三十年前,他在大连周水子机场被盖州市...
商务部:取消反制欧盟两家金融机... 中华人民共和国商务部令二〇二六年 第1号鉴于欧盟已取消对中国两家金融机构的制裁措施,现公布《关于取消...
过去24小时共有5艘船只通过霍... 总台记者当地时间24日获悉,过去24小时内,共有5艘船只通过霍尔木兹海峡,其中包括一艘伊朗油轮。(总...