微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

一次将多个 XML 文件加载/插入到 Oracle 表中

如何解决一次将多个 XML 文件加载/插入到 Oracle 表中

我有一个表 xml_table_date。下面是表中的结构和示例数据。

但是我想一次性插入多个xml文件(这里是9个)到表中。这些文件驻留在一个 DB 目录中

我将xml文件插入表格的代码

CREATE TABLE xml_table_data (
  File_name  varchar2(100),Insert_date timestamp
  xml_data  XMLTYPE
);

INSERT INTO xml_tab VALUES ( 'DataTransfer_HH_TWWholesale_001_004_12142020113003.xml',XMLTYPE (BFILENAME ('TESTING','DataTransfer_HH_TWWholesale_001_004_12142020113003.xml'),NLS_CHARSET_ID ('AL32UTF8')));
                          

enter image description here

enter image description here

enter image description here

请帮我解决这个问题。感谢您阅读我的查询

解决方法

您可以使用带有前置处理的外部表从目录中读取文件名。

ALTER SESSION SET CONTAINER=pdb1;

CREATE DIRECTORY data_dir   AS '/u02/data';
CREATE DIRECTORY script_dir AS '/u02/scripts';
CREATE DIRECTORY log_dir    AS '/u02/logs';

GRANT READ,WRITE ON DIRECTORY   data_dir   TO demo1;
GRANT READ,EXECUTE ON DIRECTORY script_dir TO demo1;
GRANT READ,WRITE ON DIRECTORY   log_dir    TO demo1;

在脚本目录中创建一个 list_files.sh 文件。确保 oracle 是所有者并且该文件的权限为 755。 预处理脚本文件不继承 $PATH 环境变量。所以你必须在所有命令之前加上 /usr/bin。

/usr/bin/ls -1 /u02/data/test*.xml | /usr/bin/xargs -n1 /usr/bin/basename

您还需要一个外部表的源文件,但这可以是一个空的虚拟文件。

CREATE TABLE data_files
   ( file_name VARCHAR2(255))
ORGANIZATION EXTERNAL
(
   TYPE ORACLE_LOADER
   DEFAULT DIRECTORY data_dir
   ACCESS PARAMETERS
      ( RECORDS DELIMITED BY NEWLINE CHARACTERSET AL32UTF8
        PREPROCESSOR script_dir: 'list_files.sh'
        BADFILE log_dir:'list_files_%a_%p.bad'
        LOGFILE log_dir:'list_files_%a_%p.log'
        FIELDS TERMINATED BY WHITESPACE
      )
   LOCATION ('dummy.txt')
)
REJECT LIMIT UNLIMITED;

现在您可以将 xml 数据插入到您的表中。

INSERT INTO xml_table_data
   ( file_name,insert_date,xml_data
   )
SELECT file_name,SYSTIMESTAMP,XMLTYPE (BFILENAME ('DATA_DIR',file_name),NLS_CHARSET_ID ('AL32UTF8'))
  FROM data_files;

您仍然需要根据您的环境调整示例。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。