• oracle--导出、导入blob类型的字段


    blob是oracle中的一个数据类型,保存的是压缩后的二进制形式的大数据。

    数据迁移如果涉及到blob字段,都不好处理,因为无法用常规方法进行操作,如:使用select查看该字段,也无法用insert插入该字段的值。

    以下记录了blob字段的导出、导入方法流程。

    方法原理:利用UTL_FILE将blob字段的内容以二进制的形式导出到txt文档,然后用dbms_blob将文档内容导入到指定的数据库表中

    1、创建一个文本文档来保存blob数据

    这里在home目录下创建了一个名为test.txt的文件,即/home/dhl/test.txt

    2、创建oracle临时目录

    create or replace directory UTL_FILE_DIR as '/home/dhl/';

    3、导出blob数据

    这里以SY_QRTZ_JOB_DETAILS这张数据表为例子,其中的JOB_DATA就是blob类型的字段

     1 DECLARE
     2   file_handle UTL_FILE.FILE_TYPE;
     3   b_lob BLOB;
     4 BEGIN
     5   select JOB_DATA into b_lob from SY_QRTZ_JOB_DETAILS  where JOB_NAME='2WNfkfZZ14YUodhnYOfEzbl';
     6 
     7   file_handle := utl_file.fopen('UTL_FILE_DIR', 'test.txt', 'W');  
     8   utl_file.PUT_RAW(file_handle , b_lob, true);  
     9   UTL_FILE.FCLOSE(file_handle);
    10 END;

    4、将文档内容导入到指定的数据库表中

     1 DECLARE
     2   b_file bfile;
     3   b_lob BLOB;
     4 BEGIN
     5   --return a into b_lob将该列与一个blog类型的变量绑定在一起,以后只要为b_lob赋值,即等于将该值插入了表中
     6   INSERT
     7   INTO SY_QRTZ_JOB_DETAILS
     8     (
     9       SCHED_NAME,
    10       JOB_NAME,
    11       JOB_GROUP,
    12       DESCRIPTION,
    13       JOB_CLASS_NAME,
    14       IS_DURABLE,
    15       IS_NONCONCURRENT,
    16       IS_UPDATE_DATA,
    17       REQUESTS_RECOVERY,
    18       JOB_DATA
    19     )
    20     VALUES
    21     (
    22       'RhScheduler',
    23       'test6',
    24       'DEFAULT',
    25       'test6',
    26       'com.rh.core.icbc.imp.NImpStateJob',
    27       '1',
    28       '0',
    29       '0',
    30       '0',
    31       empty_blob()
    32     )
    33     RETURN JOB_DATA
    34   INTO b_lob;
    35   --将文件转换为bfile
    36   b_file := bfilename('UTL_FILE_DIR', 'test.txt');
    37   dbms_lob.open(b_file, dbms_lob.file_readonly);
    38   -- 将b_file中的内容转换到b_lob
    39   dbms_lob.loadfromfile(b_lob,b_file,dbms_lob.getlength(b_file));
    40   dbms_lob.close(b_file);
    41   COMMIT;
    42 END;
  • 相关阅读:
    Python os 模块
    Python sys 模块
    [SAP BASIS]How to kill process in SAP ?
    linux lsof 详解
    [ORACLE] Oracle 索引失效总结
    [SAP BASIS] [TMS] 更改 Backup-Domain-Controler as Domain Controller|将TMS备用域控制器改为主域控制器
    python 生产者消费者模型
    Python 多线程
    python queue 模块
    [Linux]ipcs,ipcm 命令详解
  • 原文地址:https://www.cnblogs.com/dhl-2013/p/6211897.html
Copyright © 2020-2023  润新知