首页 > 解决方案 > 多行 - 每行多个 CLOB SQL 加载器

问题描述

我发现自己陷入了困境。

我正在解析多个 SOAP 调用条目的日志文件。每个soap调用都可以包含4000多个字符的有效负载,阻止我使用varchar2。所以我必须使用 CLOB)

我必须将这些有效负载加载到 oracle DB (12g) 上。我成功地将日志拆分为单个字段,并将有效负载和调用的标头放在两个单个文件中。

如何创建从 infile(包含其他字段的数据)加载并成对读取 CLOB 文件的 CTL 文件?理想情况下:

LOAD DATA
INFILE 'load.ldr'
BADFILE 'load.bad'
APPEND
INTO TABLE ops_payload_tracker
FIELDS TERMINATED BY '§'
TRAILING NULLCOLS
( id,
direction,
http_info,
payload CLOB(),
header CLOB(),
host_name)

但后来我不知道,也无法在互联网上找到任何地方,如何为多条记录执行此操作,以及如何用两个 CLOBS 引用该记录。

值得一提的是,它是 JBOSS 日志,在 bash 环境中。

标签: bashoraclesql-loader

解决方案


  1. 检查 12c 中 varchar 类型的大小。我以为它增加到32K https://oracle-base.com/articles/12c/extended-data-types-12cR1
  2. 查看示例SQL 加载器、CLOB、分隔字段
  3. “我已经为有效负载和标头创建了两个单独的文件。我应该如何指定这两个文件具有相同的 ID?”

请参见此处的示例: https ://oracle-base.com/articles/10g/load-lob-data-using-sql-loader

大致:

样品表

1,one,01-JAN-2006,1_clob_header.txt,2_clob_details.txt
2,two,02-JAN-2006,2_clob_heder.txt,2_clob_details.txt

控制

LOAD DATA 
INFILE 'lob_test_data.txt'
   INTO TABLE lob_tab
   FIELDS TERMINATED BY ','
   (number_content    CHAR(10),
    varchar2_content  CHAR(100),
    date_content      DATE "DD-MON-YYYY" ":date_content",
    clob_filename     FILLER CHAR(100),
    clob_content      LOBFILE(clob_filename) TERMINATED BY EOF,
    blob_filename     FILLER CHAR(100),
    blob_content      LOBFILE(blob_filename) TERMINATED BY EOF)

推荐阅读